Я наношу данные с самолета на карту и хочу вставить это 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))