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

如何设置Plotly Sankey Diagram(桑基图)的固定节点顺序

Plotly桑基图批量生成固定节点顺序修正方案

问题说明

  • 循环批量生成多组桑基图时,受Plotly内置自动布局优化机制影响,各图表节点排布位置不统一
  • 要求固定节点标准展示顺序为:[Formal, Informal, Unemployed, Inactive]
  • 修正过程需保持原有Python代码的语法、变量/函数名、技术标识符完全不变
  • 效果参考:
    • 预期正确效果:节点从上到下严格按指定顺序排列,批量生成的所有图表同节点位置完全一致
    • 当前错误效果:节点位置随单组数据流量变化自动调整,不同图表同节点位置偏移,顺序不符合预设要求

修正原理

Plotly桑基图默认会根据链路流量权重自动调整节点垂直位置,要强制固定顺序,需要显式指定每个节点的归一化垂直坐标,同时关闭自动排布逻辑,所有原有业务代码、变量逻辑不需要改动,仅新增节点位置配置即可。

具体修正代码

在原有构造桑基图节点配置的位置,新增坐标映射逻辑,其他原有代码完全保留:

# ---------- 以下为新增固定顺序配置,原有代码不需要修改 ----------
# 定义固定节点顺序
fixed_order = ["Formal", "Informal", "Unemployed", "Inactive"]
# 为每个节点分配归一化y坐标(0为画布底部,1为画布顶部,预留边距避免节点溢出)
y_position_map = {node_name: 0.9 - idx * 0.26 for idx, node_name in enumerate(fixed_order)}
# 按原有node_labels的顺序生成匹配的y坐标列表
fixed_node_y = [y_position_map[label] for label in node_labels]
# ---------- 新增配置结束 ----------

# 原有node配置字典,仅新增y参数,其他原有参数完全不动
node = dict(
    pad=15,
    thickness=20,
    line=dict(color="black", width=0.5),
    label=node_labels,
    y=fixed_node_y  # 新增:传入固定y坐标
)

# 原有初始化Sankey的代码,仅新增arrangement参数,其他原有配置完全不动
fig = go.Figure(go.Sankey(
    arrangement="fixed",  # 新增:关闭自动布局调整,强制使用指定坐标
    node=node,
    link=link  # 原有link配置,完全不动
))

补充说明

如果桑基图是多列节点结构(比如左侧为源节点、右侧为目标节点),只需要给同名列的节点匹配上述y坐标即可,可额外给左侧节点统一设置x=0.1、右侧节点统一设置x=0.9,不会影响垂直顺序的固定效果,批量生成时所有图表的节点位置会完全统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:12:18