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

Pandas饼图自定义调色板失效:颜色仍按数值分配问题排查

问题原因及解决办法

问题根源

  • df_pc[geog].value_counts()默认按数值降序返回结果,每次循环中不同geog对应的类别出现频率差异,会导致返回的类别顺序和你定义color_mapping时用的df_pc_region.index顺序不一致。
  • plot(kind='pie')的colors参数是按当前饼图的类别顺序依次分配颜色,而非根据类别名称匹配。比如第一次循环里类别A排第一拿到第一个颜色,第二次循环里类别B排第一也拿第一个颜色,自然同一类别无法保持颜色一致。

解决办法

方法一:统一统计结果的类别顺序

先将value_counts()的结果重新索引,强制对齐color_mapping的键顺序,确保每次饼图的类别顺序和颜色映射完全匹配:

# 获取统计结果,按color_mapping的键排序,缺失类别补0(避免出现NaN)
counts = df_pc[geog].value_counts(normalize=True).reindex(color_mapping.keys(), fill_value=0)
# 生成对应顺序的颜色列表
plot_colors = [color_mapping[region] for region in counts.index]
# 绘制饼图
plot = counts.plot(kind='pie', startangle=90, colors=plot_colors, autopct='%1.1f%%', fontsize=9, pctdistance=0.80, explode=[0.05]*len(counts))

方法二:根据当前类别动态匹配颜色

每次循环时,依据当前value_counts()返回的类别顺序,从color_mapping中提取对应颜色,无需固定顺序:

# 获取当前饼图的类别列表
current_regions = df_pc[geog].value_counts(normalize=True).index
# 按当前类别顺序取对应颜色
plot_colors = [color_mapping[region] for region in current_regions]
# 绘制饼图
plot = df_pc[geog].value_counts(normalize=True).plot(kind='pie', startangle=90, colors=plot_colors, autopct='%1.1f%%', fontsize=9, pctdistance=0.80, explode=[0.05]*len(current_regions))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:24:52