Python绘制桑基图(附带实例)
桑基图(Sankey Diagram)是一种用于可视化流量、流程或能量转移的图表类型。它使用有向图的方式表示数据的流动,通过不同宽度的箭头连接表示不同的流量量级,并显示出流量的起点和终点。
桑基图的优点是能够直观地显示数据的流动和转移过程,帮助观察数据的来源、目的和量级。它可用于可视化各种流程,如物质流量、能源转移、人员流动等。
【实例】绘制简易桑基图,展示节点之间的流动关系和数量关系。输入如下代码:
输出的结果如下图所示:

图 1 简易桑基图
【实例 2】通过绘制桑基图展示 2050 年能源预测数据。输入如下代码:
输出的结果如下图所示:

图 2 桑基图
桑基图的优点是能够直观地显示数据的流动和转移过程,帮助观察数据的来源、目的和量级。它可用于可视化各种流程,如物质流量、能源转移、人员流动等。
【实例】绘制简易桑基图,展示节点之间的流动关系和数量关系。输入如下代码:
import plotly.graph_objects as go
# 创建桑基图
fig = go.Figure(go.Sankey(
arrangement="snap",
node={
"label": ["A", "B", "C", "D", "E", "F"],
"x": [0.2, 0.1, 0.5, 0.7, 0.3, 0.5],
"y": [0.7, 0.5, 0.2, 0.4, 0.2, 0.3],
'pad': 10
},
link={
"source": [0, 0, 1, 2, 5, 4, 3, 5],
"target": [5, 3, 4, 3, 0, 2, 2, 3],
"value": [1, 2, 1, 1, 1, 1, 1, 2]
}
))
fig.show()
上述代码绘制的桑基图显示了 6 个节点(A、B、C、D、E、F),它们之间存在流动关系,每条链接表示一定数量的流动。
图 1 简易桑基图
【实例 2】通过绘制桑基图展示 2050 年能源预测数据。输入如下代码:
import plotly.graph_objects as go
import json
# 从本地文件获取数据
file_path='D:/sankey_energy.json'
with open(file_path, 'r') as file: data=json.load(file)
# 重写灰色链接的颜色为对应源节点的颜色,并添加透明度
opacity=0.4
data['data'][0]['node']['color']=['rgba(255,0,255,0.8)' if color=="magenta" else color
for color in data['data'][0]['node']['color']]
data['data'][0]['link']['color']=[data['data'][0]['node']['color']
[src].replace("0.8",str(opacity))
for src in data['data'][0]['link']['source']]
# 创建 Sankey 图
fig=go.Figure(data=[go.Sankey(
valueformat=".0f",
valuesuffix="TWh",
# 定义节点
node=dict(
pad=15,
thickness=15,
line=dict(color="black",width=0.5),
label=data['data'][0]['node']['label'],
color=data['data'][0]['node']['color']
),
# 添加链接
link=dict(
source=data['data'][0]['link']['source'],
target=data['data'][0]['link']['target'],
value=data['data'][0]['link']['value'],
label=data['data'][0]['link']['label'],
color=data['data'][0]['link']['color']
))
])
# 设置图表标题和字体大小
fig.update_layout(title_text="Energy forecast for 2050", font_size=10)
fig.show()
上述代码显示了不同能源之间的流动关系,以及它们的数量关系。代码中使用 go.Sankey 创建桑基图,并设置节点和链接的属性。使用 update_layout() 方法设置图表的标题和字体大小。使用 show() 方法显示生成的桑基图。输出的结果如下图所示:

图 2 桑基图
ICP备案:
公安联网备案: