绘制具有可变坐标的 xarray 数据集
Plotting xarray datasets with variable coordinates
我正在尝试使用 xarray 在可变网格上绘制数据。存储我的数据的网格随时间变化,但保持相同的尺寸。
我希望能够在给定时间绘制它的一维切片。下面显示了我正在尝试做的玩具示例。
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
time = [0.1, 0.2] # i.e. time in seconds
# a 1d grid changes over time, but keeps the same dims
radius = np.array([np.arange(3),
np.arange(3)*1.2])
velocity = np.sin(radius) # make some random velocity field
ds = xr.Dataset({'velocity': (['time', 'radius'], velocity)},
coords={'r': (['time','radius'], radius),
'time': time})
如果我尝试在不同的时间绘制它,即
ds.sel(time=0.1)['velocity'].plot()
ds.sel(time=0.2)['velocity'].plot()
plt.show()
但我希望它能复制我可以明确使用的行为
matplotlib。在这里它正确地绘制了当时的速度与半径的关系。
plt.plot(radius[0], velocity[0])
plt.plot(radius[1], velocity[1])
plt.show()
我可能用错了 xarray,但它应该是根据当时正确的半径值绘制速度。
我是否设置了错误的数据集或使用了错误的 plot/index 功能?
我同意这种行为是意外的,但它不完全是一个错误。
查看您要绘制的变量:
da = ds.sel(time=0.2)['velocity']
print(da)
产量:
<xarray.DataArray 'velocity' (radius: 3)>
array([ 0. , 0.932039, 0.675463])
Coordinates:
r (radius) float64 0.0 1.2 2.4
time float64 0.2
Dimensions without coordinates: radius
我们看到没有名为 radius
的坐标变量,而这正是 xarray
在为上面显示的图创建 x 坐标时所寻找的。在你的情况下,你需要一个简单的工作,我们将一维坐标变量重命名为与维度相同的名称:
for time in [0.1, 0.2]:
ds.sel(time=time)['velocity'].rename({'r': 'radius'}).plot(label=time)
plt.legend()
plt.title('example for SO')
我正在尝试使用 xarray 在可变网格上绘制数据。存储我的数据的网格随时间变化,但保持相同的尺寸。
我希望能够在给定时间绘制它的一维切片。下面显示了我正在尝试做的玩具示例。
import xarray as xr
import numpy as np
import matplotlib.pyplot as plt
time = [0.1, 0.2] # i.e. time in seconds
# a 1d grid changes over time, but keeps the same dims
radius = np.array([np.arange(3),
np.arange(3)*1.2])
velocity = np.sin(radius) # make some random velocity field
ds = xr.Dataset({'velocity': (['time', 'radius'], velocity)},
coords={'r': (['time','radius'], radius),
'time': time})
如果我尝试在不同的时间绘制它,即
ds.sel(time=0.1)['velocity'].plot()
ds.sel(time=0.2)['velocity'].plot()
plt.show()
但我希望它能复制我可以明确使用的行为 matplotlib。在这里它正确地绘制了当时的速度与半径的关系。
plt.plot(radius[0], velocity[0])
plt.plot(radius[1], velocity[1])
plt.show()
我可能用错了 xarray,但它应该是根据当时正确的半径值绘制速度。
我是否设置了错误的数据集或使用了错误的 plot/index 功能?
我同意这种行为是意外的,但它不完全是一个错误。
查看您要绘制的变量:
da = ds.sel(time=0.2)['velocity']
print(da)
产量:
<xarray.DataArray 'velocity' (radius: 3)>
array([ 0. , 0.932039, 0.675463])
Coordinates:
r (radius) float64 0.0 1.2 2.4
time float64 0.2
Dimensions without coordinates: radius
我们看到没有名为 radius
的坐标变量,而这正是 xarray
在为上面显示的图创建 x 坐标时所寻找的。在你的情况下,你需要一个简单的工作,我们将一维坐标变量重命名为与维度相同的名称:
for time in [0.1, 0.2]:
ds.sel(time=time)['velocity'].rename({'r': 'radius'}).plot(label=time)
plt.legend()
plt.title('example for SO')