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
相关产品推荐
相关产品推荐

