Holoviews 中的多维数据

Multidimensional data in Holoviews

我有一个 4-D 数据集(如 xr.DataArray),尺寸为 temperaturedatasourcetimealtitude

如何创建 temperature(src0, z)temperature(src1, z) 的散点图,以便我可以通过滑块 select 高度?

我目前遇到的问题是,当我将数据转换为 hv.Table 时,除其他外还有一列 datasource 和一列 temperature,我无法计算了解如何绘制 temperature(datasource=='src0')temperature(datasource=='src1')


编辑:

我试着澄清一下:我有一个 4 维数据集 DATA(这是一个 xr.DataArray),尺寸为 data_variabledatasourcetime, 和 altitude.

data_variable 有 2 个条目,temperaturehumidity

datasource 有 2 个条目,modelmeasurement

有 6 个高度和 ~2000 次。

如何创建具有

的散点图

这样 altitudedata_variable 可以 select 使用滑块编辑?

如果我对你的问题的理解正确,你想绘制温度随时间变化的散点图,比较两个数据源并按不同高度索引?

# Load the data into a holoviews Dataset
ds = hv.Dataset(data_array)

# Create Scatter objects plotting time vs. temperature
# and group by altitude and datasource
scatter = ds.to(hv.Scatter, 'time', 'temperature',
                groupby=['altitude', 'datasource'], dynamic=True)

# Now overlay the datasource dimension and display
scatter.overlay('datasource')

希望我正确理解了你的问题,但基于这个基本模式,你应该能够以任何你想要的方式绘制数据。

编辑:根据您的编辑,主要问题是 HoloViews 期望每个 data_variable 都在一个单独的数组中,在 pandas 术语中,您需要执行与 pd.melt 相同的操作.

# Define data array like yours
dataarray = xr.DataArray(np.random.rand(10, 10, 2, 2), name='variable',
                   coords=[('time', range(10)), ('altitude', range(10)),
                           ('datasource', ['model', 'measurement']),
                           ('data_variable', ['humidity', 'temperature'])])

# Groupby datasource and data_variable, combining the resultant array into a Dataset with 4 data variables
group_dims = ['datasource', 'data_variable']
grouped = hv.Dataset(dataarray, datatype=['xarray']).groupby(group_dims)
dataset = xr.merge([da.data.rename({'variable': ' '.join(key)}).drop(group_dims)
                    for key, da in grouped.items()])

ds = hv.Dataset(dataset)
scatter = ds.to(hv.Scatter, 'model temperature', 'measurement temperature', 'altitude')

但是请注意,在测试这个时我 运行 遇到了一个错误,我现在已经为此打开了一个 PR(参见 here