使用hvplot从xarray数据集绘制两个数据变量



我在python中有一个xarray数据集。我想绘制两个依赖(数据)变量对彼此使用hvplot库。下面是一个简单的示例数据集:

import numpy as np
import xarray as xr
import hvplot.xarray
# Create the dataset
time = np.linspace(0,10)
x = time*2 + 1
y = time*3 - 1
ds = xr.Dataset()
ds.coords['time'] = time
ds['x'] = (['time'],x)
ds['y'] = (['time'],y)
# Output
<xarray.Dataset>
Dimensions:  (time: 50)
Coordinates:
* time     (time) float64 0.0 0.2041 0.4082 0.6122 ... 9.388 9.592 9.796 10.0
Data variables:
x        (time) float64 1.0 1.408 1.816 2.224 ... 19.78 20.18 20.59 21.0
y        (time) float64 -1.0 -0.3878 0.2245 0.8367 ... 27.78 28.39 29.0

很容易画出x或y随时间的关系
ds.x.hvplot()

然而,我想要的是x与y的关系,我希望这能工作:

ds.hvplot(x='x',y='y')

,但这只能一次绘制一个点,并使用滑块表示"时间"坐标。Xarray有一个绘图函数,它使用matplotlib按预期进行绘图。

ds.plot.scatter(x='x',y='y')

是否有办法用hvplot复制这个?

另一种可能:

ds.y.assign_coords(x=ds.x).hvplot.scatter(x="x", y="y")

不太了解xarray,但以下两种方法都可以工作,但老实说,我希望其他人能提供更好的解决方案:

ds.reset_index(dims_or_levels='time').hvplot.scatter(x='x', y='y')

或:

ds.hvplot.scatter(x='x', y='y', color='blue').overlay()

绘制两个数据变量相对关系的最简单方法可能是将数据集转换为pandas DataFrame。然后使用hvplot

进行绘图
import hvplot.pandas # to add .hvplot to DataFrames
# Convert Dataset to DataFrame, then select x,y
ds.to_dataframe().hvplot(x='x',y='y')

如果数据集有其他变量,可以使用'by'参数分组

ds.to_dataframe().hvplot(x='x',y='y',by=another_variable)

最新更新