Python Matplotlib Basemap накладывает маленькое изображение на график карты

Я наношу данные с самолета на карту и хочу вставить это PNG-изображение самолета размером 75 на 29 пикселей в координаты последней точки данных на графике.

airplane

Насколько я знаю и читал, pyplot.imshow()— лучший способ добиться этого. Тем не менее, я зацикливаюсь на шаге 1, даже отображая изображение. Используя обычный график вместо базовой карты, достаточно легко получить изображение, отображаемое с помощью imshow, но при использовании базовой карты я вообще не могу заставить его отображаться. См. пример кода.

Если я смогу отобразить изображение на карте, я предполагаю, что смогу путем проб и ошибок установить его положение и некоторые правильные размеры для него, используя атрибут extentimshow(), с координатами графика, преобразованными из координаты карты x,y = m(lons,lats).

Вот пример кода (, чтобы попробовать его, вы можете загрузить изображение самолета выше ).

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

Вот полученное изображение, на котором нет следов самолета. Я пробовал несколько разных размеров, используя extent, думая, что, возможно, просто сделал его слишком маленьким, но безуспешно. Я также пытался установить zorder=10, но тоже безуспешно. Любая помощь будет оценена по достоинству.

result

Обновление :Теперь я могу заставить изображение по крайней мере отображаться, используя m.imshowвместо plt.imshow, так как первое проходит в экземпляре осей карты, но аргумент extent, похоже, не влияет на размеры изображение, так как оно всегда заполняет весь график, независимо от того, насколько малы я делаю размеры extent, даже если я устанавливаю их равными нулю. Как правильно масштабировать изображение самолета и расположить его рядом с последней точкой данных?

im = m.imshow(img, extent=(x[-1],x[-1]+5,y[-1],y[-1]+2))

result2

27
задан Glorfindel 22 August 2019 в 07:05
поделиться