绘制跨越子午线和日期线的全局轮廓数据

问题描述

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

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

polar orbiting data

我进行了搜索,发现如果我对我的经度值进行

lons[lons < 0] += 360

然后它删除了奇怪的条纹。我认为它实际上只是将条纹移至南半球(与子午线交叉的地方),但是由于该区域都是“缺失”值,因此不会在图上显示,所以我不在乎。

polar orbiting data - longitudes all positive

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

Global dataset

当我尝试应用对极地数据有用的“修复”时,我得到了一个非常讨厌的非常无用的错误

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还是cartopy或引发错误的原因。

我尝试使用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)

解决方法

我认为您遇到了烦人的问题,但很难找到bug in CartoPy。基本上,在变换轮廓并将其裁剪到地图范围时,它会错误地生成一些Shapely几何形状。解决该问题(无法解决)的一些措施包括稍微调整地图边界和调整轮廓线水平。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...