如何使用Plotly的sunburst旭日图展示各分支均值而非总和适配比率数据
Plotly旭日图展示分组均值的实现方法
Plotly旭日图默认对传入的数值列做求和聚合,要展示各层级平均值可通过以下两种方案实现:
方案1:预聚合数据后绘图(全版本兼容)
- 操作逻辑:按照旭日图的层级顺序逐层分组计算平均值,再将所有层级的聚合结果拼接为适配sunburst输入的数据集后绘图
- 示例代码:
import pandas as pd import plotly.express as px # 示例原始数据:包含层级列level1、level2,比率值列rate df = pd.read_csv("你的数据文件路径") # 逐层计算各层级节点的均值 # 一级分组聚合 level1_agg = df.groupby("level1")["rate"].mean().reset_index() level1_agg["level2"] = "" # 一级节点无子层级,对应位置填空 # 二级分组聚合 level2_agg = df.groupby(["level1", "level2"])["rate"].mean().reset_index() # 拼接所有层级数据 sunburst_input = pd.concat([level1_agg, level2_agg], ignore_index=True) # 绘制旭日图 fig = px.sunburst( sunburst_input, path=["level1", "level2"], # 替换为你的实际层级列顺序 values="rate" # 替换为你的比率值列名 ) fig.show()
方案2:直接指定aggfunc参数(Plotly 4.10+版本支持)
- 操作逻辑:直接传入原始数据,通过
aggfunc参数指定聚合逻辑为均值,无需提前处理数据 - 示例代码:
import plotly.express as px fig = px.sunburst( df, # 原始未聚合的数据 path=["level1", "level2", "level3"], # 替换为你的实际层级列 values="rate", # 替换为你的比率值列名 aggfunc="mean" # 核心参数,指定按平均值聚合 ) fig.show()
注意:使用aggfunc参数时需确保数值列为float/int类型,避免聚合报错。
效果对比
- 当前默认求和的旭日图结果:

- groupby求和验证结果:

- 预期的均值展示旭日图结果:

内容的提问来源于stack exchange,提问作者Imene KOLLI
相关产品推荐
相关产品推荐

