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

如何在Python Plotly桑基图中显示无出入流的孤立节点

解决Plotly桑基图孤立节点不显示的问题

Plotly Sankey默认会自动隐藏没有任何流入/流出连接的节点(比如你的A3),要让这类孤立节点显示,最可靠的方式是给它添加一条自循环的空连接,同时可以自定义它的厚度与位置。

修改后的完整代码

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 15,
      # 给每个节点单独设置厚度,A3对应索引6,可自定义数值
      thickness = [20, 20, 20, 20, 20, 20, 30],
      line = dict(color = "black", width = 0.5),
      label = ["A1", "A2", "B1", "B2", "C1", "C2", "A3"],
      color = ["blue"]*6 + ["orange"],  # 给A3单独设色方便区分
      # 可选:手动定位A3的位置,x/y范围0-1,避免和其他节点重叠
      x = [0, 0, 0.5, 0.5, 1, 1, 0],
      y = [0.8, 0.6, 0.8, 0.6, 0.8, 0.6, 0.2]
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3, 6],  # 加入A3的索引作为source
      target = [2, 3, 3, 4, 4, 5, 6],  # 加入A3的索引作为target(自循环)
      value = [8, 4, 2, 8, 4, 2, 0]     # 自循环value设为0,不会显示连线
  ))])

fig.update_layout(title_text="包含孤立节点的桑基图", font_size=12)
fig.show()

关键细节说明

  • 自循环空连接:给孤立节点添加一条source和target均为自身、value=0的连接,Plotly会识别到节点存在,且因为value为0不会显示多余连线。
  • 自定义厚度:将thickness从单一数值改为列表,对应每个节点的厚度,比如A3(索引6)设为30,其他节点保持20。
  • 手动定位:通过node.x和node.y可精准控制孤立节点的位置,x=0对应左列、x=1对应右列,y控制垂直位置,避免与其他节点重叠。

替代方案(无需添加连接)

如果不想添加自循环连接,可通过强制设置node.x和node.y的方式显示孤立节点,但这种方式在部分Plotly版本中稳定性稍差:

import plotly.graph_objects as go

fig = go.Figure(data=[go.Sankey(
    node = dict(
      pad = 15,
      thickness = [20,20,20,20,20,20,30],
      line = dict(color = "black", width = 0.5),
      label = ["A1", "A2", "B1", "B2", "C1", "C2", "A3"],
      color = ["blue"]*6 + ["orange"],
      # 强制指定所有节点的位置,包括A3
      x = [0,0,0.5,0.5,1,1,0],
      y = [0.8,0.6,0.8,0.6,0.8,0.6,0.2],
      hoverinfo='all'  # 确保节点可交互
    ),
    link = dict(
      source = [0,1,0,2,3,3],
      target = [2,3,3,4,4,5],
      value = [8,4,2,8,4,2]
  ))])

fig.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:53:24