如何使用Holoviews和Bokeh绘制指定数据的桑基图?
使用Holoviews + Bokeh绘制指定样式桑基图
实现步骤
1. 安装并导入依赖库
先确保安装所需工具包:
pip install holoviews bokeh pandas
导入核心库:
import pandas as pd import holoviews as hv from bokeh.io import show hv.extension('bokeh')
2. 准备并清洗数据
将你提供的表格数据转为DataFrame,并清理“来源”列的冗余数字与空格:
# 原始数据 raw_data = [ ["22 SPHYRNIDAE", "CE", 3, "Critically Endangered"], ["27 TRIAKIDAE", "CE", 5, "Critically Endangered"], ["67 DASYATIDAE", "CE", 2, "Critically Endangered"], ["14 CARCHARHINIDAE", "CE", 4, "Critically Endangered"], ["62 UROTRYGONIDAE", "CE", 2, "Critically Endangered"] ] # 转为DataFrame并清洗来源列 df = pd.DataFrame(raw_data, columns=["来源", "目标", "数值", "链接类别"]) df["来源"] = df["来源"].str.replace(r'^\d+\s+', '', regex=True).str.strip()
3. 构建并自定义桑基图
利用Holoviews的Sankey组件生成图表,并调整样式匹配参考图:
# 初始化桑基图 sankey_plot = hv.Sankey(df, kdims=["来源", "目标"], vdims=["数值", "链接类别"]) # 自定义样式参数 sankey_plot = sankey_plot.opts( # 按链接类别统一着色 color=hv.Cycle('链接类别'), # 节点标签样式调整 node_label_font_size='12pt', node_label_color='black', node_fill_alpha=0.9, # 链接视觉优化 edge_line_width=0, edge_alpha=0.7, # 图表布局与标题 width=800, height=500, title="软骨鱼类科濒危等级分布", title_font_size='14pt', # 按需隐藏图例 legend_position='none' ) # 渲染展示图表 show(hv.render(sankey_plot))
关键细节说明
- 数据清洗:移除“来源”列开头的数字与冗余空格,让节点标签更简洁;
- 颜色映射:通过
hv.Cycle('链接类别')实现同类别链接颜色统一,匹配参考图的分类着色逻辑; - 样式微调:若参考图有节点颜色、布局方向等特殊要求,可额外添加
node_fill_color、orientation等参数调整。
内容的提问来源于stack exchange,提问作者Sajna v.h
相关产品推荐
相关产品推荐

