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

PyPlot饼图数值错误及绘制显示异常问题求助

问题分析与解决方案

问题1:第一次饼图数值错误

你用groupby.sum()是对T1列的数值求和,而非统计每个分类的出现次数:

  • waschen对应的T1数值总和是1+3+5=9
  • lesen对应的T1数值总和是3+6+7=16
    这和你想要的「分类出现次数相等」预期不符——你实际需要的是每个分类的计数,而非数值求和。

问题2:第二次仅显示AxesSubplot信息

你在调用plot.pie()时指定了ax=ax,但没有提前初始化matplotlib的Axes对象,导致代码只输出对象实例信息,没有生成图表。


正确实现代码

方法1:用size()直接获取分类计数(推荐)

size()会直接返回每个分组的行数,也就是分类的出现次数:

import pandas as pd
import matplotlib.pyplot as plt

# 初始化数据
data = {'Category':  ['waschen','anziehen','lesen', 'waschen', 'waschen', 'lesen', 'lesen'],
        'T1': ['1', '2', '3','3', '5', '6', '7']}
df = pd.DataFrame(data)
df['T1'] = df['T1'].astype('int64')

# 绘制饼图
df.groupby('Category').size().plot.pie(autopct='%.1f%%')
plt.ylabel('')  # 移除默认的y轴标签,优化饼图美观度
plt.show()

方法2:用count()并正确初始化Axes对象

如果坚持用count(),需要先创建matplotlib的画布和轴对象:

import pandas as pd
import matplotlib.pyplot as plt

# 初始化数据
data = {'Category':  ['waschen','anziehen','lesen', 'waschen', 'waschen', 'lesen', 'lesen'],
        'T1': ['1', '2', '3','3', '5', '6', '7']}
df = pd.DataFrame(data)
df['T1'] = df['T1'].astype('int64')

# 初始化画布和轴
fig, ax = plt.subplots()
# 基于count()绘制饼图
df.groupby('Category').count().plot.pie(y='T1', ax=ax, autopct='%.1f%%')
ax.set_ylabel('')  # 移除y轴标签
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:27