Python数据可视化:使用Pyecharts v0.5.x绘制桑基图完整指南
本文详细介绍如何使用Python库Pyecharts(v0.5.x版本)绘制桑基图。桑基图通过分支宽度展示数据流量,常用于能源、金融等领域。文章涵盖从环境安装、核心参数配置(nodes和links)到HTML文件生成的完整步骤,并提供基础及进阶代码示例,帮助开发者实现清晰的数据流向可视化。
首先,我们需要明确桑基图的基本概念。
桑基图(Sankey diagram),全称为桑基能量分流图或桑基能量平衡图,是一种专门用于展示数据流动关系的图表类型。
该图表通过延伸分支的宽度来直观反映数据流量的大小,广泛应用于能源消耗、材料成分分析以及金融资金流向等数据的可视化场景。
这种图表因1898年Matthew Henry Phineas Riall Sankey绘制的“蒸汽机能源效率图”而得名,并以其姓氏“Sankey”作为正式命名沿用至今。
理解桑基图的核心在于把握其表现数据流动过程的功能。虽然Matplotlib库也能绘制桑基图,但其视觉效果往往不够理想,如下图所示:

为了实现更美观的可视化效果,本文采用另一个流行的Python可视化库pyecharts进行绘图。
需要注意的是,pyecharts主要分为v0.5.x和v1两个大版本,二者之间不兼容。v0.5.x版本支持Python 2.7及3.4+环境,而v1版本仅支持Python 3.6+,且官方文档也据此分为两套。
尽管网络上关于v1版本的资料丰富,但本文旨在为仍在使用v0.5.x版本的用户提供帮助。后续所有示例均基于v0.5.x版本编写,参考官方文档。
首先,通过熟悉的pip工具进行库的安装。
pip install pyecharts
安装完成后,可对照官方文档的API说明进行学习,重点在于引入Sankey类。

核心参数主要涉及对桑基图展示效果的配置,这是实现自定义样式的关键。
绘制桑基图的基本逻辑可总结为以下三个步骤:
第一步,声明使用Sankey类。
sankey = Sankey("桑基图示例", width=1200, height=600)
第二步,使用add方法添加桑基图的具体配置信息。
sankey.add(
"sankey",
nodes=j["nodes"],
links=j["links"],
line_opacity=0.2,
line_curve=0.5,
line_color="source",
is_label_show=True,
label_pos="right",
)
在此步骤中,nodes和links是必须提供的参数,分别代表桑基图中的节点和连接线。数据格式需为包含字典的列表,其中name、source、target和value为固定字段,具体结构如下:
nodes = [
{'name': 'category1'}, {'name': 'category2'}, {'name': 'category3'},
{'name': 'category4'}, {'name': 'category5'}, {'name': 'category6'},
]
links = [
{'source': 'category1', 'target': 'category2', 'value': 10},
{'source': 'category2', 'target': 'category3', 'value': 15},
{'source': 'category3', 'target': 'category4', 'value': 20},
{'source': 'category5', 'target': 'category6', 'value': 25}
]
第三步,调用render方法生成HTML文件以进行展示。
sankey.render()
最后,分享一个完整的桑基图应用示例:
def sankey_analysis():
nodes = [{'name':'Cluster 1'}, {'name':'Cluster 2'},{'name':'Cluster 3'},
{'name':'Young'},{'name':'Medium'},{'name':'Elder'}]
result = np.array([
[130,151,188],
[735,462,670],
[711,625,881]])
targets = ['Young', 'Medium', 'Elder']
links = []
for i in range(0,3):
for j in range(0,3):
sub_dict ={}
sub_dict['source'] = 'Cluster '+str(i+1)
sub_dict['target'] = targets[j]
sub_dict['value'] = result[i,j]
links.append(sub_dict)
pic = (Sankey(name, width=1200, height=600).add('', nodes, links,
sankey_node_width=80,
sankey_node_gap=5,
line_opacity=0.7,
line_curve=0.5,
line_color='source',
is_label_show=True,
is_random = True,
label_text_size=14,
label_pos="inside"))
pic.render('sankey.html')

参考资料:
1. https://05x-docs.pyecharts.org/#/zh-cn/prepare
以上即为Python数据可视化中利用Pyecharts库实现桑基图效果的详细内容,更多关于Pyecharts库的相关资料请持续关注本站其他文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













