使用Cartopy的ccrs.Mercator()绘制contourf时图像空白的问题咨询
使用Cartopy的ccrs.Mercator()绘制contourf时图像空白的问题咨询
你好,我仔细看了你的代码和遇到的问题,这个空白现象其实是Cartopy里投影参数匹配错误导致的,咱们来理清楚问题所在:
问题根源
你在contourf函数里指定了transform=ccrs.Mercator(),但这里犯了一个Cartopy新手常踩的坑:
projection=ccrs.Mercator()是你给绘图轴(ax1)设置的目标显示坐标系,也就是最终图要呈现的投影方式;- 而
transform参数需要指定的是你的原始数据(lon、lat)所在的坐标系。你的数据是经纬度格式,对应的是ccrs.PlateCarree()(也就是地理坐标系),不是Mercator投影坐标。
当你错误地把transform设为Mercator时,Cartopy会把你的经纬度值当成Mercator投影下的平面坐标来处理,这完全不符合数据的实际含义,导致绘制的图形被放到了可视范围之外,所以看起来就是空白的。而换成PlateCarree作为transform时,数据坐标系和参数匹配,自然就能正确显示了。
修正方案
只需要把contourf里的transform参数改成ccrs.PlateCarree()即可,修正后的关键代码段如下:
cf = ax1.contourf(lon, lat, chl, levels=np.linspace(0,5,50), cmap=cmaps.MPL_rainbow, transform=ccrs.PlateCarree(), extend='both')
额外提醒
记住Cartopy里这两个核心参数的区别:
projection:定义绘图轴最终要使用的投影(即图的显示方式)transform:告诉Cartopy你的输入数据是基于哪个坐标系的,它会帮你把数据转换到projection指定的坐标系下显示
只要这两个参数对应正确,就不会再出现类似的空白或图形偏移问题啦!
备注:内容来源于stack exchange,提问作者Auroralin
相关产品推荐
相关产品推荐

