Python Matplotlib Mapa bazowa nakłada mały obraz na wykresie mapy
Kreślę dane ze statku powietrznego na mapie i chciałbym wstawić ten obraz PNG samolotu o wymiarach 75 na 29 pikseli na współrzędne ostatniego punktu danych na wykresie.
samolot http://i45.tinypic.com/mslr86.jpg
O ile wiem i przeczytałempyplot.imshow()
to najlepszy sposób, aby to osiągnąć. Jednak odkładam słuchawkę na kroku 1, aby obraz był nawet wyświetlany. Używając normalnego wykresu zamiast mapy bazowej, łatwo jest uzyskać obraz przy użyciu imshow, ale podczas korzystania z mapy bazowej nie mogę go wyświetlić. Zobacz przykładowy kod.
Jeśli uda mi się wyświetlić obraz na mapie, zakładam, że mogę, metodą prób i błędów, ustawić jego pozycję i niektóre odpowiednie wymiary za pomocąextent
atrybutimshow()
, ze współrzędnymi wykresu przeliczonymi ze współrzędnych mapyx,y = m(lons,lats)
.
Oto przykładowy kod (aby go wypróbować, możesz pobrać obraz samolotu powyżej).
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
import Image
from numpy import arange
lats = arange(26,29,0.5)
lons = arange(-90,-87,0.5)
m = Basemap(projection='cyl',llcrnrlon=min(lons)-2,llcrnrlat=min(lats)-2,
urcrnrlon=max(lons)+2,urcrnrlat=max(lats)+2,resolution='i')
x,y = m(lons,lats)
u,v, = arange(0,51,10),arange(0,51,10)
barbs = m.barbs(x,y,u,v)
m.drawcoastlines(); m.drawcountries(); m.drawstates()
img = Image.open('c130j_75px.png')
im = plt.imshow(img, extent=(x[-1],x[-1]+50000,y[-1],y[-1]+50000))
plt.show()
Oto wynikowy obraz, który nie zawiera śladu samolotu. Korzystałem z kilku różnych rozmiarówextent
, myśląc, że mogłem po prostu uczynić go zbyt małym, ale bez powodzenia. Próbowałem też ustawićzorder=10
, ale także bez szczęścia. Każda pomoc byłaby doceniana.
wynik http://i45.tinypic.com/35mgnev.jpg
Aktualizacja: Teraz mogę uzyskać obraz, aby przynajmniej pojawił się przy użycium.imshow
zamiastplt.imshow
, ponieważ pierwszy przechodzi w instancji osi mapy, aleextent
argument wydaje się nie mieć wpływu na wymiary obrazu, ponieważ zawsze wypełnia cały wykres bez względu na to, jak mały jestemextent
wymiary, nawet jeśli ustawię je na zero. Jak mogę odpowiednio skalować obraz samolotu i ustawić go w pobliżu ostatniego punktu danych?
im = m.imshow(img, extent=(x[-1],x[-1]+5,y[-1],y[-1]+2))