python 用全息图和散景绘制桑基图

ie3xauqp  于 2023-06-20  发布在  Python
关注(0)|答案(1)|浏览(72)

我怎样才能用这些数据画出下面的桑基图呢
| 来源|目标|价值|分类_链接|
| - -----|- -----|- -----|- -----|
| 鱼科|CE| 3|极度濒危|
| 科|CE| 5个|极度濒危|
| 鱼科|CE| 2|极度濒危|
| 真鲨科|CE| 4|极度濒危|
| 62尾鼠科|CE| 2|极度濒危|

yhxst69z

yhxst69z1#

最简单的方法是使用pandas DataFrame。你的table看起来很接近我们想要的。然后用这个DataFrame调用hv.Sankey()

import pandas as pd
import holoviews as hv
hv.extension('bokeh')

df = pd.DataFrame({
    'Source':['SPHYRNIDAE', 'TRIAKIDAE', 'DASYATIDAE',' CARCHARHINIDAE', 'UROTRYGONIDAE'],
    'Target':['CE']*5,
    'Value': [3,5,2,4,2]
})
>>>         Source Target  Value
0       SPHYRNIDAE     CE      3
1        TRIAKIDAE     CE      5
2       DASYATIDAE     CE      2
3   CARCHARHINIDAE     CE      4
4    UROTRYGONIDAE     CE      2

sankey = hv.Sankey(df)
sankey.opts(width=600, height=400)

上面代码的输出是

要使用颜色设置边缘的样式,请向DataFrame添加一个包含颜色信息(颜色字符串或十六进制字符串)的列,并将列名传递给ops()调用中的参数edge_color

df = pd.DataFrame({
    'Source':['SPHYRNIDAE', 'TRIAKIDAE', 'DASYATIDAE',' CARCHARHINIDAE', 'UROTRYGONIDAE'],
    'Target':['CE']*5,
    'Value': [3,5,2,4,2],
    'EdgeColor': ['blue', 'red', 'black', 'orange', 'magenta']
})
sankey = hv.Sankey(df)
sankey.opts(width=600, height=400, edge_color='EdgeColor')

或者使用ndo中的默认颜色并将其传递给边缘。要使用左节点中的颜色,请将源的列名传递给hv.dim().str()。要使用目标节点的颜色,请将目标节点的列名传递给hv.dim().str()

sankey = hv.Sankey(df)
sankey.opts(width=600, height=400, edge_color=hv.dim('Source').str())
# sankey.opts(width=600, height=400, edge_color=hv.dim('Target').str())

评论

这段代码是在散景3.1.1、面板1.0.2和全息视图1.16.0上运行的

参考资料

https://holoviews.org/reference/elements/matplotlib/Sankey.html#sankey

相关问题