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

如何使用Python Plotly为桑基图目标节点匹配流入链路颜色

Plotly 桑基图目标节点与流入链路颜色匹配解决方案

要实现目标节点颜色匹配流入链路,核心逻辑是为每个目标节点匹配其对应流入链路的颜色值,赋值给node参数的color属性即可。如果单个节点存在多条流入链路,可根据需求选择匹配流量最大的链路颜色、第一条流入链路颜色等规则,以下为通用实现方案:


实现步骤

1. 规则说明

  • 单流入节点:直接取唯一流入链路的颜色作为节点颜色
  • 多流入节点:可按需选择匹配规则,下方示例默认取流量最高的流入链路颜色,也可自行调整为取第一条流入链路颜色等其他规则

2. 完整代码示例

你可以直接替换示例中的链路颜色数组color为你自己提前定义的颜色值即可生效:

import plotly.graph_objects as go

# 原有基础数据
label = ['A', 'B', 'Z', 'Y', 'X']
source = [0, 0, 0, 1, 1, 1]
target = [2, 3, 4, 2, 3, 4]
value = [100, 200, 300, 400, 500, 600]
# 示例链路颜色,对应每个source-target链路,可直接替换为你自己定义的color数组
color = [
    'rgba(239,85,59,0.6)', # A->Z
    'rgba(239,85,59,0.6)', # A->Y
    'rgba(239,85,59,0.6)', # A->X
    'rgba(59,130,246,0.6)', # B->Z
    'rgba(59,130,246,0.6)', # B->Y
    'rgba(59,130,246,0.6)'  # B->X
]

# 生成节点颜色数组
node_color = ['#888'] * len(label) # 初始化所有节点为灰色,源节点可保留默认或自定义颜色
# 遍历所有链路为目标节点赋值颜色
for s, t, c, v in zip(source, target, color, value):
    # 取当前节点所有流入链路的最大流量对应的颜色
    max_in_flow = max([v2 for s2, t2, c2, v2 in zip(source, target, color, value) if t2 == t])
    if v == max_in_flow:
        node_color[t] = c.replace('0.6', '1') # 去除链路透明度,节点用不透明颜色显示更清晰

# 原有绘图逻辑,新增node的color参数
link = dict(source = source, target = target, value = value, color = color)
node = dict(label = label, pad=35, thickness = 10, color=node_color)
data = go.Sankey(link = link, node = node)
fig=go.Figure(data)
fig.show()

自定义调整说明

  • 若需要自定义源节点颜色,直接修改node_color对应索引的颜色值即可,例如node_color[0] = 'darkred'可将A节点设置为深红色
  • 若不需要调整节点透明度,直接赋值node_color[t] = c即可,无需处理replace逻辑
  • 若多流入节点需要优先匹配第一条流入链路的颜色,删除流量判断逻辑,直接写node_color[t] = c即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:18:03