You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python的Plotly桑基图中精确控制链接顺序

桑基图链接顺序精细控制方案

问题背景

需要绘制4列及以上的桑基图,实现入口垂直位置与出口位置一致的清晰流向追踪,核心需求是翻转节点3的入口链接顺序,达成1->3->5和0->3->6的对应流向。此前尝试调整source列表顺序、使用domain参数均无效,默认的snap布局会自动按节点索引排序链接,覆盖手动设置的顺序。

解决思路

Plotly桑基图的默认snap布局会自动优化节点和链接位置,若要精细控制链接顺序,需:

  • 将布局模式从snap改为fixed,关闭自动排序逻辑
  • 手动指定每个节点的x(水平位置,对应列)和y(垂直位置)坐标,固定节点位置
  • 按需求的链接顺序排列source、target、value列表,确保链接顺序与节点垂直位置对应

实现代码

import plotly.graph_objects as go

fig = go.Figure(go.Sankey(
    # 关闭自动布局,使用固定模式
    arrangement='fixed',
    node=dict(
        label=["0", "1", "2", "3", "4", "5","6"],
        align='left',
        # 手动设置节点水平位置(x值0-1,划分不同列)
        x=[0, 0, 0.33, 0.33, 0.33, 0.66, 0.66],
        # 手动设置节点垂直位置(y值0-1,控制上下顺序)
        y=[0.2, 0.8, 0.5, 0.5, 0.5, 0.8, 0.2]
    ),
    link=dict(
        arrowlen=15,
        # 按需求顺序排列链接:先1->3,再0->3,确保入口顺序翻转
        source=[1, 0, 0, 1, 0, 1, 2, 3, 3, 4],
        target=[3, 3, 2, 2, 4, 4, 5, 5, 6, 6],
        value= [1, 1, 1, 1, 1, 1, 2, 1, 1, 2]  
    )
))

fig.update_layout(title_text="桑基图链接顺序控制示例", font_size=12)
fig.show()

代码说明

  • arrangement='fixed':禁用自动布局优化,完全遵循手动设置的节点位置和链接顺序
  • node.x:将节点分为3列(0、0.33、0.66),对应输入层、中间层、输出层,可根据需求调整列数和间距
  • node.y:设置节点垂直位置,让节点1(y=0.8)在节点0(y=0.2)上方,节点5(y=0.8)在节点6(y=0.2)上方,确保1->3->5与0->3->6的流向垂直对齐
  • 链接列表按1->3、0->3的顺序排列,配合节点垂直位置,实现节点3的入口顺序翻转

内容的提问来源于stack exchange,提问作者krupton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:50:18