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

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")
)

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值