首页 > 解决方案 > 桑基图python

问题描述

我正在尝试在 Python 中制作一个如下所示的 sankey 图表:

数字

但是我遇到了麻烦,因为它会产生循环,如您所见:

图1

我究竟做错了什么?

我的脚本是:

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
      node = dict(
      pad = 15,
      thickness = 20,
      line = dict(color = "black", width = 0.5),
      label = ["A1", "A2", "A3", "A4", "A5", "A4", "A2", "A6", "A3", "A5"], 
      color = "blue"
    ),
    link = dict(source = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
                target = [0, 6, 8, 5, 9, 3, 1, 7, 2, 4], 
                value =  [951, 795, 469, 408, 320, 1507 ,327 ,295, 288, 232] 
  ))])

fig.update_layout(title_text="Basic Sankey Diagram", font_size=10)
fig.show()

标签: pythonplotly-python

解决方案


将源列表的第一个值与目标列表的第一个值连接起来,将源列表的第二个值与目标列表的第二个值连接起来,等等。

这意味着绘制以下线条:

0 (A1) 0 (A1) 环形
1 (A2) 6 (A2)
2 (A3) 8 (A3)
3 (A4) 5 (A5)
4 (A5) 9 (A5)
0 (A1) 3 (A3)
1 (A2) 1 (A2) 环形
2 (A3) 7 (A6)
3 (A4) 2 (A3)
4 (A5) 4 (A5) 环形

如您所见,线是从 A1 (idx 0) 到 A1 (idx 0)、从 A2 (idx 1) 到 A2 (idx 1) 以及从 A5 (idx 4) 到 A5 (idx 4) 绘制的。

问题中的绿橙色图不能用 plotly 生成,因为它没有提供没有连接的节点的选项。


推荐阅读