PyPlot饼图数值错误及绘制显示异常问题求助
问题分析与解决方案
问题1:第一次饼图数值错误
你用groupby.sum()是对T1列的数值求和,而非统计每个分类的出现次数:
waschen对应的T1数值总和是1+3+5=9lesen对应的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
相关产品推荐
相关产品推荐

