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

如何基于给定DataFrame使用Plotly绘制桑基图?

用Plotly绘制桑基图的解决方案

没问题,我来帮你搞定这个桑基图的绘制!Plotly的桑基图要求把文本形式的源、目标标签转换成数字索引,这大概率是你之前操作失败的关键原因。下面是针对你的DataFrame的完整可运行代码:

import pandas as pd
import plotly.graph_objects as go

# 创建你提供的DataFrame
df = pd.DataFrame({
    "Vendor Name": ["AKJ Education", "AKJ Education", "Amazon", "Amazon", "Amazon", "Flipkart"],
    "Category": ["Books", "Computers & Tablets", "Books", "Computers & Tablets", "Other", "Books"],
    "Count": [846888, 1045, 1294423, 42165, 415, 1023]
})

# 第一步:生成所有唯一的节点标签(源+目标)
all_labels = pd.concat([df["Vendor Name"], df["Category"]]).unique()

# 第二步:创建标签到数字索引的映射
label_to_id = {label: idx for idx, label in enumerate(all_labels)}

# 第三步:把DataFrame中的源和目标转换成对应的索引
df["source_id"] = df["Vendor Name"].map(label_to_id)
df["target_id"] = df["Category"].map(label_to_id)

# 第四步:构建桑基图
fig = go.Figure(data=[go.Sankey(
    node = dict(
        pad = 15,
        thickness = 20,
        line = dict(color = "black", width = 0.5),
        label = all_labels,
        color = "blue"
    ),
    link = dict(
        source = df["source_id"],
        target = df["target_id"],
        value = df["Count"],
        # 可选:让链接颜色和源节点色调一致,增强可读性
        color = [f"rgba(0,0,255,{0.3 + i/len(df)*0.5})" for i in range(len(df))]
    )
)])

# 设置图表标题
fig.update_layout(title_text="供应商-品类流量桑基图", font_size=12)

# 展示图表
fig.show()

关键步骤解释:

  • 标签转索引:Plotly的桑基图不直接支持文本作为source和target,必须用节点在label列表中的索引值,所以我们先把所有唯一的供应商和品类合并成一个列表,再给每个标签分配ID。
  • 节点配置:node参数里的pad控制节点间距,thickness控制节点宽度,label就是我们之前生成的所有唯一标签。
  • 链接配置:link里的source、target对应转换后的索引,value就是你的Count列,用来控制流量宽度。

运行这段代码后,你就能看到符合需求的桑基图了,每个供应商到对应品类的流量宽度会根据Count值自动调整~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:13