桑基图(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绘制桑基图的步骤,桑基图对于我们细化分析部分数据,分析不同层级的数据有很大帮助,希望本文能够帮助大家。
获取更多技术资料,请点击!