2012-09-07 11 views
14

Sto tracciando un mucchio di coordinate UTM usando un file matplotlib.pyplot.scatter. Ho anche una foto di sfondo che conosco esattamente l'estensione della figura. Quando stampo i miei dati e setto l'asse, posso visualizzare correttamente lo scatter. Se stampo la foto aerea usando imshow, usa il numero di pixel come posizione dell'asse. Devo spostare l'immagine (array numpy) alla sua corretta posizione UTM. Qualche idea? Sono abbastanza nuovo per Matplotlib e Numpy.Offset Matshotlib imshow per corrispondere all'asse?

Ad esempio: so che l'angolo in alto a sinistra dell'immagine (coordinata imshow: 0,0) ha la coordinata UTM (269658.4, 538318.2). Come posso dire a imshow la stessa cosa?

Devo anche dire che ho studiato Basemap ma non sembra ancora supportare completamente UTM. La mia area di studio è molto piccola.

risposta

18

È necessario utilizzare l'argomento di parola extent per imshow.

Come un esempio veloce:

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

Grazie! Questo ha fatto esattamente quello che volevo! Non sono sicuro del motivo per cui non ho potuto trovare quella parola chiave nell'API. –

+0

È facile perdersi in tutti gli argomenti delle parole chiave per le varie funzioni matplotlib. È nei documenti, però, lo prometto! :) Felice di aiutare, in ogni caso. –