Перекос изображения при применении картопреобразований

Я делаю некоторые заговоры, используя cartopy и matplotlib, и недавно я использовал преобразование PlateCarree, но я перешел на Mercator, потому что Луизиана была слишком раздавлена ​​для моего вкуса. До переключения у меня был логотип, отображаемый в левом нижнем углу с использованием этих двух строк кода logo = matplotlib.image.imread('/Users/ian/Desktop/M.png') plt.imshow(logo, extent =(lon-offset -1 + .25, lon - offset + .75, lat - offset + .25, lat - offset + 1 + .75), zorder=35)

Где экстент оси был установлен, используя эти точки

ax.set_extent([lon-offset-1, lon+offset+1, lat-offset, lat+offset])

Вот как выглядел график при использовании PlateCarree:

После перехода на Mercator у меня все заработало хорошо, кроме логотипа. Я добавил аргумент ключевого слова преобразования в линию построения изображения, поэтому теперь он выглядит так:

plt.imshow(logo, extent =(lon-offset -1 +.25, lon - offset + .75, lat - offset + .25, lat  - offset + 1 + .75), zorder=35, transform=ccrs.PlateCarree())

но теперь логотип утратил свою четкость и перекосился с трансформацией, и самым загадочным образом он переключил углы в верхний левый угол сюжета. Теперь это выглядит так:

Кто-нибудь знает, как я могу изменить проекцию своего сюжета, не искажая это изображение? Что мне действительно нужно сделать, так это убедиться, что угол изображения находится в углу графика в преобразованной системе координат, но оставить оставшуюся часть изображения независимой от системы координат. Я думал о том, чтобы, возможно, поместить изображение в одиночку в отдельный субплот, а потом пытался разместить этот субплот прямо поверх основного. Похоже, довольно плохое решение. Спасибо!

1 ответ

Вы можете получить лучшие результаты, если разместите логотип изображения в координатах осей, а не в координатах данных. Вы можете использовать ax.transAxes выполните преобразование для этого и укажите экстент в координатах осей ([0, 0] внизу слева, [1, 1] вверху справа).

Другие вопросы по тегам