软件测试|Python数据可视化神器——pyecharts教程(十五)

使用pyecharts绘制桑基图

简介

桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,右图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。本文我们将介绍如何使用pyecharts来绘制桑基图。

环境准备

首先我们要配置好我们的环境,如果我们未安装pyecharts,我们需要先安装这个库,安装命令如下:

pip install pyecharts

安装完之后,我们需要导入绘制桑基图的类,如下:

# 导入所需的库
from pyecharts.charts import Sankey
from pyecharts import options as opts

绘制桑基图

绘制桑基图需要有两个数据集,一个为nodes,一个为links。第一个数据集为记录每个节点的名称,另一个为描述每个节点之间的关系以及节点方块的大小。

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

完成了上述步骤之后,我们可以运行代码绘制一个基础的桑基图,完整代码如下:

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": "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()  # 创建一个Sankey对象
    .add(  # 添加数据
        series_name="",  # 序列名称为空
        nodes=nodes,  # 指定节点数据
        links=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="基础桑基图"),  # 设置标题选项
        tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove"),  # 设置提示框选项
    )
)


c.render("基础桑基图.html")  # 将图表渲染为HTML文件

运行代码,绘制的桑基图如下所示:

在这里插入图片描述

修改图形方向

我们上面绘制的图形是水平方向的,如果我们想要将图形改为垂直方向的,只需要添加一个参数即可,在add中,添加orient="vertical"参数即可,如下:

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": "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()  # 创建一个Sankey对象
    .add(  # 添加数据
        series_name="",  # 序列名称为空
        nodes=nodes,  # 指定节点数据
        links=links,  # 指定链接数据
        linestyle_opt=opts.LineStyleOpts(opacity=0.2, curve=0.5, color="source"),  # 设置连线样式
        label_opts=opts.LabelOpts(position="right"),  # 设置标签位置
        orient="vertical" # 设置垂直方向
    )
    .set_global_opts(  # 设置全局选项
        title_opts=opts.TitleOpts(title="基础桑基图-垂直"),  # 设置标题选项
        tooltip_opts=opts.TooltipOpts(trigger="item", trigger_on="mousemove"),  # 设置提示框选项
    )
)

c.render("基础桑基图-垂直.html")  # 将图表渲染为HTML文件

运行代码,打开生成的HTML文件,界面如下图:

在这里插入图片描述

绘图示例

接下来我们绘制一个实例图,介绍如何绘制桑基图,代码如下:

from pyecharts import options as opts  # 图形设置
from pyecharts.charts import Sankey  # 导入桑基图型的类

nodes_list = [
    {'name':'总销量'},
    {'name': '秦plus'},
    {'name': '宋plus'},
    {'name': '元plus'},
    {'name': '汉'},
    {'name': '唐'},
    {'name': '秦plus dmi'},
    {'name': '秦plus ev'},
    {'name': '宋plus dmi'},
    {'name': '宋plus ev'},
    {'name': '元plus dmi'},
    {'name': '元plus ev'},
    {'name': '汉 dmi'},
    {'name': '汉 ev'},
    {'name': '唐 dmi'},
    {'name': '唐 ev'}
]

links_list = [
    {'source': '总销量', 'target': '秦plus', 'value': 40000},
    {'source': '总销量', 'target': '宋plus', 'value': 24000},
    {'source': '总销量', 'target': '元plus', 'value': 30000},
    {'source': '总销量', 'target': '汉', 'value': 20000},
    {'source': '总销量', 'target': '唐', 'value': 18000},
    {'source': '秦plus', 'target': '秦plus dmi', 'value': 32000},
    {'source': '秦plus', 'target': '秦plus ev', 'value': 8000},
    {'source': '宋plus', 'target': '宋plus dmi', 'value': 16000},
    {'source': '宋plus', 'target': '宋plus ev', 'value': 8000},
    {'source': '元plus', 'target': '元plus dmi', 'value': 20000},
    {'source': '元plus', 'target': '元plus ev', 'value': 10000},
    {'source': '汉', 'target': '汉 dmi', 'value': 12000},
    {'source': '汉', 'target': '汉 ev', 'value': 8000},
    {'source': '唐', 'target': '唐 dmi', 'value': 10000},
    {'source': '唐', 'target': '唐 ev', 'value': 8000}

]

c = (
    Sankey()
    .add(
        "比亚迪销量",
        nodes_list,
        links_list,
        linestyle_opt=opts.LineStyleOpts(opacity=0.5, curve=0.5, color="source"),
        label_opts=opts.LabelOpts(position="right"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="比亚迪部分车型销量桑葚图"))
)

c.render("比亚迪部分车型销量桑葚图.html")  # 将图表渲染为HTML文件

运行代码,打开生成的HTML文件,图像如下:

在这里插入图片描述

总结

本文主要介绍了如何使用pyecharts绘制桑基图的步骤,桑基图对于我们细化分析部分数据,分析不同层级的数据有很大帮助,希望本文能够帮助大家。

获取更多技术资料,请点击!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值