I'm plotting a bunch of UTM coordinates using a matplotlib.pyplot.scatter. I also have a background air photo that I know matches the extent of the figure exactly. When I plot my data and set the axis I can display the scatter correctly. If I plot the air photo using imshow it uses the pixel number as the axis location. I need to shift the image (numpy array) to it's correct UTM position. Any ideas? I'm fairly new to matplotlib and numpy.
For example: I know that the top left corner of the image (imshow coordinate: 0,0) has the UTM coordinate (269658.4, 538318.2). How do I tell imshow the same thing?
I should also say that I investigated Basemap but it doesn't appear to fully support UTM yet. My study area is very small.
You need to use the extent
keyword argument to imshow.
As a quick example:
import numpy as np
import matplotlib.pyplot as plt
# Random points between 50000 and 51000
x, y = 1000 * np.random.random((2, 10)) + 50000
# A 10x10 "image"...
image = np.arange(100).reshape((10,10))
# In a lot of cases, image data will be "flipped" vertically, so you may need
# use the `origin` kwarg, as well (or just swap the ymin and ymax ordering).
plt.imshow(image, extent=[x.min(), x.max(), y.min(), y.max()])
plt.plot(x, y, 'ro')
plt.show()