2012-09-07 12 views
14

Estoy trazando un conjunto de coordenadas UTM usando un matplotlib.pyplot.scatter. También tengo una foto aérea de fondo que sé que coincide exactamente con la extensión de la figura. Cuando trazo mis datos y configuro el eje, puedo mostrar el scatter correctamente. Si trazo la foto de aire usando imshow, usa el número de píxel como la ubicación del eje. Necesito cambiar la imagen (matriz numpy) a la posición correcta de UTM. ¿Algunas ideas? Soy bastante nuevo en matplotlib y numpy.Matplotlib imshow offset para coincidir con el eje?

Por ejemplo: Sé que la esquina superior izquierda de la imagen (coordenada imshow: 0,0) tiene la coordenada UTM (269658.4, 538318.2). ¿Cómo le digo imshow lo mismo?

También debería decir que investigué Basemap pero aún no parece ser totalmente compatible con UTM. Mi área de estudio es muy pequeña.

Respuesta

18

Debe usar el argumento de palabra clave extent para mostrar.

Como un ejemplo rápido:

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() 

enter image description here

+0

Gracias! ¡Esto hizo exactamente lo que yo quería! No estoy seguro de por qué no pude encontrar esa palabra clave en la API. –

+0

Es fácil perderse en todos los argumentos de palabra clave para las diversas funciones de matplotlib. Sin embargo, está en los documentos, ¡lo prometo! :) Me alegra ayudar, en cualquier caso. –

Cuestiones relacionadas