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