xarray.DataArray.roll 方法创建不需要的工件

2023-12-27

最近,我一直在使用 xarray 加载一堆 NetCDF 文件并使用 cartopy 绘制它们。

今天我注意到一件有趣的事情。对于我感兴趣的区域,我需要选择 20W 到 40E 经度。根据设计,我无法用一种方法做到这一点KEdiff_mean.sel(lat=slice(-50, -10),lon=slice(-20,40))就像 NCL 或其他地理空间数据的特定工具箱一样,因为 lon 从 0 开始到 0-360。如果我调用它会返回一个空数据数组isel(lon=slice(-200,400)相反(我在 3600*1800 全局网格上工作),然后我发现这很棒DataArray.roll method.

通过沿着 lon 维度滚动 DataArray,我可以选择我想要的经度,穿过 0 度线KEdiff_mean.roll(lon=1800).isel(lon=slice(1600,2200)).sel(lat=slice(-50, -10))

有趣的是,当我使用它绘制它时DataArray.plot,我在没有值的区域上出现了奇怪的水平条纹。要么滚动方法没有按我的预期工作,要么我错过了一些东西,但除了条纹之外,绘图看起来是正确的。有人可以照亮一些吗?处理这种圆形经度选择的推荐方法是什么?也许首先将默认的经度坐标从 0-360 替换为 -180 到 180 ?谢谢你!

This is the correct plot: I plot globally then set extent of the plot Correct plot

When roll is invoked: Roll before selection


不能说我不知道​​陆地上的条纹发生了什么,但一种黑客方法是使用原始数据中的掩模xr.where http://xarray.pydata.org/en/stable/generated/xarray.DataArray.where.html例如,对于我使用的波浪数据

hs = xr.open_dataarray('hs') # 2D file
mask = hs.where(hs > 0) # Keep points with data > 0, set others to NaN
new_var = new_var.where(mask > 0) # new_var should be 2D

另一个黑客(我知道我没有回答你的问题)是绘制数据并在土地上添加一个特征

import cartopy.feature as cfeature
# ...
ax.add_feature(cfeature.LAND, facecolor='white')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

xarray.DataArray.roll 方法创建不需要的工件 的相关文章

随机推荐