有没有办法在全息图桑基图中过滤维度
Is there a way to filter dimension in holoviews Sankey diagram
我试图在 Holoviews 中显示从 Sankey 图表中的位置迁移,但我找不到添加下拉式过滤器的方法。我不允许列出比我正在绘制的更多的关键维度,我希望它能工作,因为我在其他 HoloViews 元素中获得下拉菜单,因为它会自动按我所做的所有关键维度对我的数据进行分组 not 分配给元素。
import pandas as pd
import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
df = pd.DataFrame({'from': ["a", "b", "c", "a", "b", "c"],
'to': ["d", "d", "e", "e", "e", "d"],
'number': [10, 2, 1, 8, 2, 2],
'year': [2018, 2018, 2018, 2017, 2017, 2017]})
df
from to number year
0 a d 10 2018
1 b d 2 2018
2 c e 1 2018
3 a e 8 2017
4 b e 2 2017
5 c d 2 2017
现在 Holoviews 将年份列添加到 kdims,因为我希望下拉列表按年份过滤:
kdims = ["from", "to", "year"]
vdims = ["number"]
sankey = hv.Sankey(df, kdims=kdims, vdims=vdims)
sankey.opts(label_position='left', edge_color='to', node_padding=30, node_color='number', cmap='tab20')
返回:
ValueError: kdims: list length must be between 2 and 2 (inclusive)
没有第三个关键维度,桑基图按预期工作,但没有交互式过滤器:
这里有 2 种方法可以解决您的问题:
1) 将您的数据框转换为全息视图数据集并将其转换为桑基图:
由于 'year' 位于第三个关键维度下方的代码中,因此它将用作滑块的维度。前 2 个变量('from' 和 'to')将用作 Sankey 图的关键暗淡。
hv_ds = hv.Dataset(
data=df,
kdims=['from', 'to', 'year'],
vdims=['number'],
)
hv_ds.to(hv.Sankey)
2) 或者,每年创建一个 Sankey 图字典并将其放入全息图中:
sankey_dict = {
year: hv.Sankey(df[df.year == year])
for year in df.year.unique()
}
holo = hv.HoloMap(sankey_dict, kdims='year')
两种解决方案都创建全息图:
http://holoviews.org/reference/containers/bokeh/HoloMap.html
结果图 + 滑块:
我测试过这个:
hvplot 0.5.2
holoviews 1.12.5 和 holoviews 1.13
jupyterlab 1.2.4
我试图在 Holoviews 中显示从 Sankey 图表中的位置迁移,但我找不到添加下拉式过滤器的方法。我不允许列出比我正在绘制的更多的关键维度,我希望它能工作,因为我在其他 HoloViews 元素中获得下拉菜单,因为它会自动按我所做的所有关键维度对我的数据进行分组 not 分配给元素。
import pandas as pd
import numpy as np
import holoviews as hv
from holoviews import opts
hv.extension('bokeh')
df = pd.DataFrame({'from': ["a", "b", "c", "a", "b", "c"],
'to': ["d", "d", "e", "e", "e", "d"],
'number': [10, 2, 1, 8, 2, 2],
'year': [2018, 2018, 2018, 2017, 2017, 2017]})
df
from to number year
0 a d 10 2018
1 b d 2 2018
2 c e 1 2018
3 a e 8 2017
4 b e 2 2017
5 c d 2 2017
现在 Holoviews 将年份列添加到 kdims,因为我希望下拉列表按年份过滤:
kdims = ["from", "to", "year"]
vdims = ["number"]
sankey = hv.Sankey(df, kdims=kdims, vdims=vdims)
sankey.opts(label_position='left', edge_color='to', node_padding=30, node_color='number', cmap='tab20')
返回:
ValueError: kdims: list length must be between 2 and 2 (inclusive)
没有第三个关键维度,桑基图按预期工作,但没有交互式过滤器:
这里有 2 种方法可以解决您的问题:
1) 将您的数据框转换为全息视图数据集并将其转换为桑基图:
由于 'year' 位于第三个关键维度下方的代码中,因此它将用作滑块的维度。前 2 个变量('from' 和 'to')将用作 Sankey 图的关键暗淡。
hv_ds = hv.Dataset(
data=df,
kdims=['from', 'to', 'year'],
vdims=['number'],
)
hv_ds.to(hv.Sankey)
2) 或者,每年创建一个 Sankey 图字典并将其放入全息图中:
sankey_dict = {
year: hv.Sankey(df[df.year == year])
for year in df.year.unique()
}
holo = hv.HoloMap(sankey_dict, kdims='year')
两种解决方案都创建全息图:
http://holoviews.org/reference/containers/bokeh/HoloMap.html
结果图 + 滑块:
我测试过这个:
hvplot 0.5.2
holoviews 1.12.5 和 holoviews 1.13
jupyterlab 1.2.4