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

Python中如何为Plotly旭日图所有层的同类别设置统一颜色

问题说明

现有结构如下的DataFrame df,记录了用户访问路径各步骤的出现次数:

step1    step2   step3   step4     occurances
Homepage Product Buy     Homepage 180
Homepage Product End     End      2000
Homepage End     End     End      150
Homepage Product Product Buy      100

需要绘制旭日图可视化用户路径,现有代码如下:

fig =px.sunburst(
    df,
    path = ['step1', 'step2', 'step3', 'step4'],
    values = 'occurrances',
    color ='step2'
)
fig.show()

当前仅step2层按类别设置了颜色,希望step1到step4所有层的同类别保持统一配色,实现方案如下:

实现方案

要实现所有层级同类别配色统一,核心是给所有可能出现的步骤类别指定固定的颜色映射,再手动覆盖所有节点的颜色配置,具体代码如下:

import pandas as pd
import plotly.express as px

# 1. 提取所有步骤列的唯一类别,构建固定颜色映射
step_cols = ['step1', 'step2', 'step3', 'step4']
all_categories = pd.concat([df[col] for col in step_cols]).unique()

# 自定义每个类别的固定配色,可根据需求自行修改色值
color_map = {
    "Homepage": "#4285F4",
    "Product": "#FBBC05",
    "Buy": "#34A853",
    "End": "#9AA0A6"
}

# 可选:如果有未在上面预定义的类别,自动分配plotly默认色盘的颜色
default_colors = px.colors.qualitative.Plotly
for idx, cat in enumerate(all_categories):
    if cat not in color_map:
        color_map[cat] = default_colors[idx % len(default_colors)]

# 2. 绘制旭日图
fig = px.sunburst(
    df,
    path = step_cols,
    values = 'occurances'
)

# 3. 关键步骤:遍历所有节点,按节点自身类别匹配颜色映射,实现全层同色
fig.for_each_trace(
    lambda trace: trace.update(
        marker_colors = [color_map[label.split('/')[-1]] for label in trace.labels]
    )
)

fig.show()

方案说明

  • 预先定义的color_map保证了相同类别不管出现在哪一层级,都会匹配到同一个颜色
  • 最后一步遍历旭日图所有节点,每个节点的颜色直接根据自身的标签从color_map中取值,彻底规避了仅按某一层级配色的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:01