Как построить Cartopy pcolormesh с проекцией Робинсона?

У меня есть простой фрагмент кода и спутниковые данные, которые работают по назначению с проекцией Cartopy по умолчанию «PlateCarree»:

import cartopy.crs as ccrs
from cartopy import feature
from netCDF4 import Dataset
import matplotlib.pyplot as plt

#get data
f = Dataset('data/matt.nc')
lats = f['lat'][:]
lons = f['lon'][:]
x = f['aot_869'][:]

#plot
ax = plt.axes(projection=ccrs.PlateCarree())
ax.add_feature(feature.COASTLINE, edgecolor='grey')
plt.pcolormesh(lons, lats, x, transform=ccrs.PlateCarree())
plt.show()

Но когда я меняю проекцию на что-нибудь другое, включая «Робинзон», береговая линия исчезает, а спутниковые данные остаются в проекции PlateCarree.

#plot
ax = plt.axes(projection=ccrs.Robinson())
ax.add_feature(feature.COASTLINE, edgecolor='grey')
plt.pcolormesh(lons, lats, x, transform=ccrs.Robinson())
plt.show()

Измените «transform=ccrs.Robinson()» на «transform=ccrs.PlateCarree()».

swatchai 08.05.2024 19:24

Свотчаи сработало, спасибо! Пишу в ответ сейчас!

noahlb123 09.05.2024 15:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

plt.axes должен находиться в проекции Робинсона, а plt.pcolormesh должен находиться в проекции PlateCarree, чтобы общая цифра была в проекции Робинсона. Как объясняет swatchai в комментариях, «в pcolormesh() вы должны правильно объявить систему координат (лоны, ширы) с оператором transform=??. Если (лоны, ширы) представлены в простых десятичных градусах, вы всегда используете transform=ccrs.PlateCarree(), независимо от того, какая проекция построения является."

import cartopy.crs as ccrs
from cartopy import feature
from netCDF4 import Dataset
import matplotlib.pyplot as plt

#get data
f = Dataset('data/matt.nc')
lats = f['lat'][:]
lons = f['lon'][:]
x = f['aot_869'][:]

#plot
ax = plt.axes(projection=ccrs.Robinson())
ax.add_feature(feature.COASTLINE, edgecolor='grey')
plt.pcolormesh(lons, lats, x, transform=ccrs.PlateCarree())
plt.show()

Причина в том, что в pcolormesh() вы должны объявить систему координат (лоны, широты) с помощью оператора "transform=??" правильно. Если (лоны, латы) выражены в простых десятичных градусах, вы всегда используете transform=ccrs.PlateCarree() независимо от проекции графика.

swatchai 11.05.2024 09:12

Эта страница может помочь в понимании scitools.org.uk/cartopy/docs/latest/tutorials/…

RuthC 12.05.2024 23:31

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