关于使用Python xarray将经度数组从0-360更改为-180到180的方法

时间:2018-11-16 21:12:52

标签: python python-xarray

我是一位matlab用户,最近尝试在我的计算中更多地使用Python。我正在使用xarray,并想将地球物理字段的经度数组从0-360更改为-180到180。但是当我这样做时:

df=xr.open_dataset(ecmwf_winds.nc)
u10=df['u10']
lon=df['longitude']
lon = np.where(lon > 180, lon-360, lon)
[X,Y]=np.meshgrid(lon,df.latitude)
plt.contourf(X,Y,u10)

等高线图变得有些缝隙,这是没有意义的。任何人都可以帮我。我不确定我在哪里做错了。

2 个答案:

答案 0 :(得分:1)

如果不使用where,则是另一种更快,更简单的方法

 df.coords['lon'] = (df.coords['lon'] + 180) % 360 - 180
 df = df.sortby(df.lon)

提示:要进行快速绘图,可以使用Xarrays内置的绘图功能,因此不必创建网格。

df.u10.plot()
#or
df.u10.plt.contourf()

答案 1 :(得分:0)

您需要先分配值,然后再沿着新的坐标值对所得的DataArray进行排序:

lon_name = 'longitude'  # whatever name is in the data

# Adjust lon values to make sure they are within (-180, 180)
ds['_longitude_adjusted'] = xr.where(
    ds[lon_name] > 180,
    ds[lon_name] - 360,
    ds[lon_name])

# reassign the new coords to as the main lon coords
# and sort DataArray using new coordinate values
ds = (
    ds
    .swap_dims({lon_name: '_longitude_adjusted'})
    .sel(**{'_longitude_adjusted': sorted(ds._longitude_adjusted)})
    .drop(lon_name))

ds = ds.rename({'_longitude_adjusted': lon_name})