Holoviews 中的多维数据
Multidimensional data in Holoviews
我有一个 4-D 数据集(如 xr.DataArray
),尺寸为 temperature
、datasource
、time
和 altitude
。
如何创建 temperature(src0, z)
与 temperature(src1, z)
的散点图,以便我可以通过滑块 select 高度?
我目前遇到的问题是,当我将数据转换为 hv.Table
时,除其他外还有一列 datasource
和一列 temperature
,我无法计算了解如何绘制 temperature(datasource=='src0')
与 temperature(datasource=='src1')
编辑:
我试着澄清一下:我有一个 4 维数据集 DATA
(这是一个 xr.DataArray
),尺寸为 data_variable
、datasource
、time
, 和 altitude
.
data_variable
有 2 个条目,temperature
和 humidity
。
datasource
有 2 个条目,model
和 measurement
有 6 个高度和 ~2000 次。
如何创建具有
的散点图
- 在 x 轴上
datasource
model
的数据
- 在 y 轴上
datasource
measurement
的数据
这样 altitude
和 data_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)
我有一个 4-D 数据集(如 xr.DataArray
),尺寸为 temperature
、datasource
、time
和 altitude
。
如何创建 temperature(src0, z)
与 temperature(src1, z)
的散点图,以便我可以通过滑块 select 高度?
我目前遇到的问题是,当我将数据转换为 hv.Table
时,除其他外还有一列 datasource
和一列 temperature
,我无法计算了解如何绘制 temperature(datasource=='src0')
与 temperature(datasource=='src1')
编辑:
我试着澄清一下:我有一个 4 维数据集 DATA
(这是一个 xr.DataArray
),尺寸为 data_variable
、datasource
、time
, 和 altitude
.
data_variable
有 2 个条目,temperature
和 humidity
。
datasource
有 2 个条目,model
和 measurement
有 6 个高度和 ~2000 次。
如何创建具有
的散点图- 在 x 轴上
datasource
model
的数据
- 在 y 轴上
datasource
measurement
的数据
这样 altitude
和 data_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)