python制作流动图_炫酷!用Python制作漂亮的流动桑基图

本文介绍了如何使用Pyecharts库制作流动桑基图,详细讲解了桑基图的概念、官网示例,并通过实例展示了如何生成和配置数据,最后呈现了最终的动态效果。
摘要由CSDN通过智能技术生成

桑基图绘制实践

本文中介绍的是如何制作桑基图,使用的可视化库是强大的 Pyecharts (版本1.7.1,版本一致很重要)。文章将从如下几个方面进行介绍:什么是桑基图

官网的两个 demo

桑基图绘制项目实战

在开始之前,我们先来看看通过本文制作的最终效果图:

5efa3e1784bb0fac5232f9b3563e34a7.png什么是桑基图?

桑基图(桑葚图),也叫桑基能量分流图或者桑基能量平衡图,里面的桑基其实是一个人名,全名是 马修·亨利·菲尼亚斯·里尔·桑基(Matthew Henry Phineas Riall Sankey) ,是一名爱尔兰裔工程师,也是英国皇家陆军工兵的上尉[1]。

eb672319ab34cf1277a6d9a943398ef4.png早在 1898 年的时候,他就使用这种图形来表示蒸汽机的能源效率:

ff7fea8c60446e7530d35ad7c49657bc.png桑基之后,桑基图逐渐成为科学和工程领域,代表平衡、能量流、物质流的标准模型,在一些产品的生命周期评估中也常被使用,通常应用于能源、材料成分、金融等数据的可视化分析。主要特点是:图形由边、流量和支点组成。边代表了流动的数据,流量代表了流动数据的具体数值,节点代表了不同分类

始末端的分支宽度总和相等,即所有主支宽度的总和应与所有分出去的分支宽度的总和相等,保持能量的平衡。

官网demo

本文中使用的Pyecharts版本是1.7.1,版本的一致非常重要。import pyecharts

pyecharts.__version__

c398011e8958c4c84aad1fafcc25d7f0.pngdemo_1

首先我们看看官网的第一个demo:from pyecharts import options as opts

from pyecharts.charts import Sankey

nodes = [   # 所有节点名称

{"name": "category1"},

{"name": "category2"},

{"name": "category3"},

{"name": "category4"},

{"name": "category5"},

{"name": "category6"},

]

links = [  # 每一条链路的数据,包含:父节点source + 子节点target + 数据值value

{"source": "category1", "target": "category2", "value": 10},

{"source": "category2", "target": "category3", "value": 15},

{"source": "category3", "target": "category4", "value": 20},

{"source": "category5", "target": "category6", "value": 25},

]

c = (

Sankey()

.add(

"sankey",

nodes,

links,

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="Sankey-基本示例"))

#  .render("sankey_base.html")    生成HTML文件

)

c.render_notebook()   # jupyter notebook中在线显示

在上面的代码中,nodes部分表示的是所有的节点名称,不管是父节点还是最小的子节点都要列出来;links部分表示的是每条链路的数据,包含:父节点source + 子节点target + 数据值value。根据links的数据,我们可以发现:category1——-category2———category3———category4构成了一条完整的链路,category5—category6构成了另一条链路。

4ce0e0effce2222a9dc262fc6bec0506.png下面是最终的图形:

f90e0da5777c70aae5e4cf59c9dbf3a1.pngdemo_2

接下来我们看看官网的第二个demo:import json

from pyecharts import options as opts

from pyecharts.charts import Sankey

with open("product.json", "r", encoding="utf-8") as f:   # 导入json数据

j = json.load(f)    # json数据转成字典数据

c = (

Sankey()

.add(

"sankey",

nodes=j["nodes"],   # 取出json数据的节点和链路数据

links=j["links"],

pos_top="10%",

focus_node_ad

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值