Python可视化:通过pyecharts库生成桑基图

发布时间:2024年01月06日

Python可视化:通过pyecharts库生成桑基图

今天有读者问到怎么生成桑葚图,那就借这个问题来写一篇文章吧。

桑葚图更官方名称叫桑基图。(欢迎在公众号后台留言提问~)

桑基图通常用于可视化能源或成本转移,通过桑基图可以生动的展示数据的流动和来龙去脉,帮助我们确定各部分流量在总体中的大概占比情况。

桑基图通常类似下面图片展示的样式:(本文首发在“程序员coding”公众号)

在 python 中,可以借助 pyecharts 库生成桑基图。

安装pyecharts

使用 pip 命令安装:

pip install pyecharts

查看 pyecharts 版本:

import pyecharts
print(pyecharts.__version__)

桑基图的组成

桑基图主要由边、流量和支点(nodes)组成。

其中边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类。

边的宽度与流量成比例地显示,边越宽,数值越大。

代码实现

导入包

from pyecharts.charts import Sankey
from pyecharts import options as opts

节点(nodes)数据格式如下:

[  
 {"name": "category1"},  
 {"name": "category2"},  
 {"name": "category3"},  
 {"name": "category4"},  
 {"name": "category5"},  
 {"name": "category6"},  
]

节点之间的关系(links)数据格式如下:

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},
]

创建桑基图,设置了系列名称、组件离容器的距离、主标题跳转链接等配置,点击主标题可实现跳转链接效果。

title_link = "https://www.baidu.com"
sankey_base = (
    Sankey(init_opts=opts.InitOpts(width='1300px', height='750px', bg_color='white', page_title="桑基图"))
    .add(
        series_name="sankey",  # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        nodes=nodes,
        links=links,
        pos_left="20%",  # Sankey 组件离容器左侧的距离
        pos_top="10%",  # Sankey 组件离容器上侧的距离
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="桑基图-基本示例", pos_left="20%", title_link=title_link))
    .render("sankey_base.html")
)

在浏览器中打开sankey_base.html,效果如下:(本文首发在“程序员coding”公众号)

完整代码:

from pyecharts.charts import Sankey
from pyecharts import options as opts
#(本文首发在“程序员coding”公众号)
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},
]
title_link = "http://mp.weixin.qq.com/s?__biz=MzI2NDA3MzQ0Mw==&mid=2648520238&idx=1&sn=350fda510d8aa834b551e50600f32f77&chksm=f29bafa2c5ec26b41f2e73e8a107f48ae208db57363bdb8fa231170c676dd21ee50b2d1c9f96#rd"
sankey_base = (
    Sankey(init_opts=opts.InitOpts(width='1300px', height='750px', bg_color='white', page_title="桑基图"))
    .add(
        series_name="sankey",  # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        nodes=nodes,
        links=links,
        pos_left="20%",  # Sankey 组件离容器左侧的距离
        pos_top="10%",  # Sankey 组件离容器上侧的距离
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="桑基图-基本示例", pos_left="20%", title_link=title_link))
    .render("sankey_base.html")
)

文章来源:https://blog.csdn.net/stormhou/article/details/135417334
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。