如何使用Cartopy绘制Robinson投影的pcolormesh图?
Cartopy投影切换异常问题
正常运行的PlateCarree投影代码
使用PlateCarree投影时,代码可正常渲染海岸线与卫星数据:
import cartopy.crs as ccrs from cartopy import feature from netCDF4 import Dataset import matplotlib.pyplot as plt # 获取数据 f = Dataset('data/matt.nc') lats = f['lat'][:] lons = f['lon'][:] x = f['aot_869'][:] # 绘图 ax = plt.axes(projection=ccrs.PlateCarree()) ax.add_feature(feature.COASTLINE, edgecolor='grey') plt.pcolormesh(lons, lats, x, transform=ccrs.PlateCarree()) plt.show()

切换投影后的异常情况
将目标投影改为Robinson后,海岸线消失,卫星数据显示异常:
# 绘图(修改后) ax = plt.axes(projection=ccrs.Robinson()) ax.add_feature(feature.COASTLINE, edgecolor='grey') plt.pcolormesh(lons, lats, x, transform=ccrs.Robinson()) plt.show()

问题原因与修复方案
问题出在pcolormesh的transform参数设置错误:
projection参数定义绘图的目标投影(即最终图显示的投影)transform参数需要指定原始数据的投影,你的卫星数据是经纬度格式,对应PlateCarree投影,而非Robinson
修正后的代码:
# 绘图(修复后) ax = plt.axes(projection=ccrs.Robinson()) ax.add_feature(feature.COASTLINE, edgecolor='grey') # transform保持为ccrs.PlateCarree(),因为数据是经纬度格式 plt.pcolormesh(lons, lats, x, transform=ccrs.PlateCarree()) plt.show()
这样就能在Robinson投影下正确渲染海岸线和卫星数据了。
内容的提问来源于stack exchange,提问作者noahlb123
相关产品推荐
相关产品推荐

