绘制跨越子午线和日期线的全局等高线数据



所以我有两个不同的数据集。我有一颗极地轨道卫星,它从北极附近开始,向下飞向非洲,然后越过南极,返回大西洋。我还有一些地球静止卫星的全球合成资料。该网格是从-90到90纬度和0到-0.2(围绕日期线(经度的全球覆盖范围。

所以当我绘制极地轨道数据时。我在北半球看到了一条有趣的条纹,卫星穿过了日期线。像这样。。。

极轨数据

我做了一次搜索,发现如果我这样做,我的经度值

lons[lons < 0] += 360

然后它会去除奇怪的条纹。我认为它实际上只是把条纹移到了南半球(它穿过子午线的地方(,但由于那个区域都是";缺少";它没有在情节中显示的值,所以我不在乎。

极地轨道数据-经度均为正

所以现在出现了完整的全局数据集的问题。当我在没有将所有经度转换为正值的情况下绘制它时,它会有相当多的条纹。我相信每个地方都有雨穿过日期线。

全局数据集

当我尝试应用";"修复";这对极地数据有效,我得到了一个非常讨厌的、没有信息的错误。

IllegalArgumentException: Invalid number of points in LinearRing found 3 - must be 0 or >= 4
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

没有回溯或任何东西,所以我甚至不确定是matplotlib还是caropy,或者是什么导致了错误。

我尝试过使用set_extent((裁剪图像,但它仍然有条纹。

有什么想法可以解决这个问题,或者如何欺骗matplotlib/cartopy正确绘制数据?


添加代码,但不确定实际会有多大帮助。这是非常基本的。问题更多的是因为降雨数据覆盖了全球。

normal_proj = ccrs.PlateCarree(central_longitude=0)
pos_lons = lon_data.copy()
pos_lons[pos_lons < 0] += 360
cs = plt.contourf(pos_lons, lat_data, rr_data, clevs, cmap=cmap,
transform=normal_proj, norm=norm)

我认为您在CartoPy中遇到了一个烦人但难以追踪的bug。基本上,在变换轮廓并将其剪裁到贴图范围时,会错误地生成一些Shapely几何图形。一些解决问题的方法(而不是解决问题(包括稍微调整地图边界和调整等高线级别。

最新更新