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

Jupyter Notebook中Sankey Plot无法显示,请求代码问题排查

代码问题排查与修正

核心问题点

你的代码有三个关键错误导致Sankey图无法生成:

  1. Plotly Sankey要求source/target是节点索引,而非字符串:你直接传入了Source和Target的字符串值,Plotly无法识别这些节点的对应关系
  2. 节点标签与实际流动节点不匹配:你用Attribute列作为节点标签,但实际流动的节点是Source和Target里的值
  3. 数据存在重复行:原数据里有重复的条目,会导致数值被重复计算

修正后的完整代码

import pandas as pd
import plotly.graph_objects as go

# 原始数据
data = [['TMD','TMD Create','Sub-Section 1',17],['TMD','TMD Create','Sub-Section 1',17],['C4C','Customer Tab','Sub-Section 1',10],['C4C','Customer Tab','Sub-Section 1',10],['C4C','Customer Tab','Sub-Section 1',17]]
df = pd.DataFrame(data, columns=['Source','Target','Attribute','Value'])

# 聚合重复行,避免数值重复计算
df = df.groupby(['Source', 'Target', 'Attribute'], as_index=False)['Value'].sum()

# 收集所有唯一的节点(Source和Target的所有值)
all_nodes = list(pd.unique(df[['Source', 'Target']].values.ravel('K')))

# 将Source和Target转换为对应的节点索引
source_indices = [all_nodes.index(s) for s in df['Source']]
target_indices = [all_nodes.index(t) for t in df['Target']]

# 构建Sankey的链接和节点
link = dict(source=source_indices, target=target_indices, value=df['Value'].tolist())
node = dict(label=all_nodes, pad=15, thickness=20)

# 创建并显示图表
chart = go.Sankey(link=link, node=node, arrangement="snap")
fig = go.Figure(chart)
fig.show()

额外说明

  • 聚合重复行后,TMD到TMD Create的数值会变成34,C4C到Customer Tab的数值变成37,符合实际累加逻辑
  • 如果你想给不同的链接设置颜色,可以在link里添加color参数,比如color=["#4ECDC4", "#FF6B6B"]*len(source_indices)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:15:40