2012-09-07 17 views
14

Ich zeichne eine Reihe von UTM-Koordinaten mit einem matplotlib.pyplot.scatter. Ich habe auch ein Hintergrundluftbild, das ich genau kenne, stimmt mit dem Ausmaß der Figur überein. Wenn ich meine Daten grafisch darstelle und die Achse einstelle, kann ich die Streuung korrekt anzeigen. Wenn ich das Luftbild mit imshow zeichne, verwendet es die Pixelzahl als Achsenposition. Ich muss das Bild (numpy array) auf seine korrekte UTM-Position verschieben. Irgendwelche Ideen? Ich bin ziemlich neu zu Matplotlib und numpy.Matplotlib imshow Offset zur Anpassung an die Achse?

Zum Beispiel: Ich weiß, dass die obere linke Ecke des Bildes (Imshow-Koordinate: 0,0) die UTM-Koordinate hat (269658.4, 538318.2). Wie kann ich imshow dasselbe sagen?

Ich sollte auch sagen, dass ich Basemap untersucht habe, aber UTM scheint es noch nicht vollständig zu unterstützen. Mein Studienbereich ist sehr klein.

Antwort

18

Sie müssen das extent Schlüsselwortargument zu imshow verwenden.

Als kleines Beispiel:

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

Vielen Dank! Das hat genau das gemacht, was ich wollte! Ich bin mir nicht sicher, warum ich dieses Keyword in der API nicht finden konnte. –

+0

Es ist leicht, sich in allen Schlüsselwortargumenten zu den verschiedenen Matplotlib-Funktionen zu verlieren. Aber ich verspreche es in der Dokumentation! :) Freut mich auf jeden Fall zu helfen. –

Verwandte Themen