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

