Sobreposição de mapa base de Matplotlib Python small image on map plot
Estou traçando dados de uma aeronave em um mapa e gostaria de inserir essa imagem PNG de 75 px por 29 px em um avião nas coordenadas do último ponto de dados da plotagem.
avião http://i45.tinypic.com/mslr86.jpg
Tanto quanto eu sei e li,pyplot.imshow()
é a melhor maneira de conseguir isso. No entanto, estou ficando preso no primeiro passo, conseguindo que a imagem seja exibida. Usando um enredo normal em vez do Basemap, é fácil conseguir que a imagem apareça usando o imshow, mas ao usar o Basemap, não consigo fazer com que ele apareça. Veja o código de exemplo.
Se eu conseguir que a imagem seja exibida no mapa, presumo que posso, por tentativa e erro, definir sua posição e algumas dimensões adequadas para ela usando oextent
atributo deimshow()
, com as coordenadas de plotagem convertidas das coordenadas do mapax,y = m(lons,lats)
.
Aqui está o código de exemplo (para experimentar você pode querer baixar a imagem do avião acima).
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()
Aqui está a imagem resultante, que não contém um traço do avião. Eu tentei vários tamanhos diferentes usandoextent
, pensando que talvez tenha feito isso muito pequeno, mas sem sucesso. Eu também tentei definirzorder=10
, mas também sem sorte. Qualquer ajuda seria apreciada.
resultado http://i45.tinypic.com/35mgnev.jpg
Atualização: agora posso fazer com que a imagem apareça pelo menos usandom.imshow
ao invés deplt.imshow
, uma vez que o primeiro passa na instância dos eixos do mapa, mas oextent
argumento parece não ter efeito sobre as dimensões da imagem, já que sempre preenche toda a trama, não importa quão pequena eu façaextent
dimensões, mesmo se eu definir a zero. Como posso dimensionar adequadamente a imagem do avião e posicioná-la perto do último ponto de dados?
im = m.imshow(img, extent=(x[-1],x[-1]+5,y[-1],y[-1]+2))