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

Matplotlib子图饼图类别颜色不一致、C/F列数值显示错误问题求助

问题根源

代码问题出在pandas.Series.value_counts()的默认返回逻辑和饼图颜色匹配规则不匹配:

  • value_counts()默认按统计值从高到低排序返回,若某列只有单一取值,仅返回该取值的统计结果
  • 调用plt.pie()时没有显式绑定取值和颜色的对应关系,导致全为NO的C列、全为SI的F列,统计结果都只有1个元素,都匹配到了设置的第一个颜色#172a3d,最终展示效果完全一致。

解决方案

统计每个列的取值数量时,用reindex固定NO、SI的返回顺序,缺失的取值补0,保证两者永远和设置的颜色顺序对应。

修改后完整代码如下:

import pandas as pd
import matplotlib.pyplot as plt

colnames=['a','b','c','d','e','f','g']
values=[
    ['SI','SI','NO','SI','SI','SI','NO'],
    ['SI','NO','NO','SI','NO','SI','NO'],
    ['SI','SI','NO','SI','SI','SI','NO'],
    ['SI','NO','NO','NO','NO','SI','SI'],
    ['SI','NO','NO','NO','NO','SI','NO']]

df=pd.DataFrame(values, columns=colnames)

def pieplotstest(df):
    fig,ax =plt.subplots(2,3,facecolor=(1, 1, 1),figsize=(7.2,4.3))
    plt.style.use('fivethirtyeight')

    colors=["#172a3d","#e33e31"]
    textprops=dict(color="w",weight='bold',size=5)
    count_labels = ['NO','SI'] # 固定取值顺序,和颜色一一对应

    # 封装公共饼图绘制逻辑,减少冗余代码
    def draw_pie(ax, col_name, pct_distance=0.75):
        # 固定顺序统计,缺失取值自动补0
        count_data = df[col_name].value_counts().reindex(count_labels, fill_value=0)
        ax.pie(count_data,
                colors=colors,
                autopct = '%1.1f%%',
                textprops=textprops,
                wedgeprops=dict(width=0.5),
                pctdistance=pct_distance
            )
        ax.set_title(col_name, fontsize=10)

    draw_pie(ax[0,0], 'b', pct_distance=0.7) # 保留原b列的特殊pctdistance设置
    draw_pie(ax[0,1], 'c')
    draw_pie(ax[0,2], 'd')
    draw_pie(ax[1,0], 'e')
    draw_pie(ax[1,1], 'f')
    draw_pie(ax[1,2], 'g')

    fig.legend(count_labels,
            loc=4,                
            fontsize=7
            )
    plt.suptitle('Como estan distribuidas tus ventas')
    fig.tight_layout()
    plt.savefig(f'orders3.png',dpi=600,transparent=True)

# 调用执行
pieplotstest(df)
plt.show()

内容的提问来源于stack exchange,提问作者Matias Ordoñez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:48:05