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

Plotly Sankey图中自定义x、y坐标未按预期生效的问题咨询

Plotly Sankey图中自定义x、y坐标未按预期生效的问题咨询

嗨,我完全懂你现在的困惑——明明手动给Sankey节点设置了x、y坐标,结果节点的排列顺序却和预期的不一样,确实挺闹心的。

咱们先拆解下问题:你设置了左侧三个节点(A、B、C)的x值都是0.01,y值分别是0.01、0.40、0.5,预期它们从上到下是A→B→C的顺序,但实际生成的图里却变成了A→C→B,这主要是因为你用了arrangement='snap'这个参数。

问题根源

Plotly的arrangement='snap'是用来自动优化Sankey布局的,它会尝试调整节点的位置,避免节点之间重叠或者链接交叉,哪怕你手动设置了x和y坐标,这个参数也会优先进行自动调整,直接覆盖了你的自定义设置,这就是为什么节点顺序乱掉的原因。

解决方案

要让Plotly严格遵循你设置的x、y坐标,只需要把arrangement参数改成'fixed'就可以了。另外还要注意一个细节:Plotly Sankey图的y轴默认是底部为0,顶部为1,所以你设置的y=0.01会对应最下方的位置,y=0.5对应中间偏上的位置。如果想让A在最上方,你可能需要把A的y值改成0.99,B改成0.6,C改成0.1这类,或者调整你的y值计算逻辑。

修改后的代码如下:

import plotly.graph_objects as go

fig = go.Figure(go.Sankey(
    arrangement='fixed',  # 关键修改:从snap改成fixed
    node=dict(
        label=['A', 'B', 'C', 'D', 'E', 'F'],
        x=[0.01, 0.01, 0.01, 0.5, 0.99, 0.99],
        y=[0.01, 0.40, 0.5, 0.1, 0.01, 0.3],
        pad=10,
    ),
    link=dict(
        source=[0, 1, 2, 3, 3],
        target=[3, 3, 3, 4, 5],
        value=[40, 10, 50, 30, 70]
    )
))

fig.show()

修改后运行代码,左侧的节点就会严格按照你设置的y值排列了。如果你想让A在最上方,只需要把A的y值调整为0.99,B改成0.6,C改成0.1,这样就能得到你预期的从上到下A→B→C的顺序啦。

你预期的效果是左侧x=0.01位置的节点从上到下依次为A、B、C,三个节点都连接到中间的D节点;而之前用snap参数时,实际生成的图中左侧节点顺序变成了A、C、B,和预期不符。

备注:内容来源于stack exchange,提问作者x0nar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:43:06