我有一个维度为temperature
、datasource
、time
和altitude
的4-D数据集(如xr.DataArray
如何创建具有 temperature(src0, z)
与 temperature(src1, z)
,以便我可以通过滑块选择高度?
我目前遇到的问题是,当我将数据转换为hv.Table
时,我有一列datasource
和一列temperature
,并且我无法弄清楚如何绘制temperature(datasource=='src0')
与 temperature(datasource=='src1')
编辑:
我试图澄清:我有一个4-D数据集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
?
正确理解了您的问题,您想绘制温度随时间变化的散点值,比较两个数据源并按不同高度编制索引?
# 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都在单独的数组中,在熊猫术语中,您需要执行等效的操作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(请参阅此处(