Я рисую данные с самолета на карте, и я хотел бы вставить это изображение самолета в формате PNG размером 75 х 29 пикселей в координаты последней точки данных на графике.
Насколько я знаю и читал, pyplot.imshow()
- лучший способ добиться этого. Однако я зацикливаюсь на шаге 1, заставляя изображение ровно отображаться. Используя обычный график вместо базовой карты, достаточно легко получить изображение с помощью imshow, но при использовании базовой карты я не могу заставить его отображаться вообще. См. Пример кода.
Если я могу получить изображение для отображения на карте, я предполагаю, что я могу методом проб и ошибок установить его положение и некоторые правильные размеры для него, используя атрибут extent
для imshow()
, с координатами графика, преобразованными из координат карты 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
, но тоже безуспешно. Любая помощь будет оценена.
Обновление: теперь я могу заставить изображение, по крайней мере, появиться, используя m.imshow
вместо plt.imshow
, поскольку первый проходит в экземпляре осей карты, но аргумент extent
, похоже, не влияет на размеры изображения, поскольку он всегда заполняется весь сюжет, независимо от того, насколько маленькими я делаю extent
размеров, даже если я установлю их на ноль. Как правильно масштабировать изображение самолета и расположить его рядом с последней точкой данных?
im = m.imshow(img, extent=(x[-1],x[-1]+5,y[-1],y[-1]+2))