【问题标题】:Plotting global contour data that crosses both the meridian and the dateline绘制跨越子午线和日期线的全局轮廓数据
【发布时间】:2020-08-19 21:57:05
【问题描述】:

所以我有两个不同的数据集。我有一颗极地轨道卫星,它从北极附近开始向非洲下降,然后越过南极并返回大西洋。我也有一些地球同步卫星的全球复合材料。该网格覆盖了从 -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)

【问题讨论】:

  • 将有助于添加您用于生成图像的 matplotlib/cartopy 代码。
  • 不太确定代码的哪些部分会有所帮助。除了覆盖全球的数据集本身之外,它是非常标准的东西,但我不能轻易地将这部分包含在代码的复制粘贴中。
  • 添加了一些东西。

标签: python matplotlib cartopy


【解决方案1】:

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

【讨论】:

  • 谢谢。在这一点上,映射对我的最终产品并不重要,它更多的是我正确读取数据的完整性检查,所以我将保持原样,除非将来修复 cartopy .
猜你喜欢
  • 2021-08-16
  • 1970-01-01
  • 2015-03-23
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
相关资源
最近更新 更多