The way you supplied the ticks, you're telling matplotlib to place a tick at every height value you gave it. You need to give it only the specific ticks you want to use if you're doing things this way.
import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import face
# Generating my face heights
height = np.arange(0, 800)
height_str = list(map(str, height))
plt.imshow(face())
#plt.yticks(height,height_str) # <- this is bad. Do this instead
plt.yticks(height[::50],height_str[::50]) # Gets every 50th entry
Otherwise, you could do this:
fig, ax = plt.subplots()
ax.imshow(face())
ax.set_yticks(height[::50])
Edit: To format, you can use ticker functions.
from matplotlib import ticker
ax.yaxis.set_major_formatter(ticker.StrMethodFormatter("{x:.2f}"))
From https://matplotlib.org/stable/gallery/ticks_and_spines/tick-formatters.html