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

如何获取Plotly Sankey图节点坐标并在对应位置添加层级标注

Plotly桑基图自动添加层级顶部标注方案

核心实现逻辑:利用Plotly自带的渲染后参数获取接口,自动读取节点计算完成的实际坐标,不需要手动设置坐标,可适配层级数量动态变化的场景。

完整实现代码如下:

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", "B1", "B2", "C1", "C2"],
      color = "blue"
    ),
    link = dict(
      source = [0, 1, 0, 2, 3, 3],
      target = [2, 3, 3, 4, 4, 5],
      value = [8, 4, 2, 8, 4, 2]
  ))])

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

# 获取渲染后的完整图形参数(包含节点实际坐标)
ffd = fig.full_figure_for_development(warn=False)
# 提取所有节点的x坐标,去重后按从左到右顺序对应各个层级
layer_x = sorted(list(set(ffd.data[0].node.x)))
# 自定义层级顶部标签,顺序对应从左到右的层级
layer_labels = ["A", "B", "C"]

# 批量添加标注
for x, label in zip(layer_x, layer_labels):
    fig.add_annotation(
        x=x,
        y=1.05, # 标注在桑基图顶部上方,可根据需求调整位置
        text=label,
        showarrow=False,
        font=dict(size=12, color="black"),
        xanchor="center"
    )

fig.show()

关键说明

  • 调用full_figure_for_development()时参数warn=False可忽略非必要的警告信息
  • 坐标体系为归一化坐标,取值范围0-1,修改y参数可调整标注的垂直高度
  • 若后续层级数量变化,只需修改layer_labels列表和标签内容即可自动适配,无需调整坐标逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:05