pandas分组统计后用seaborn绘制多级柱状图的代码问题排查
代码报错原因与修正方案
原有代码存在的3个核心问题
- 变量未先定义就赋值:执行
grouped_gender['count'] = ...前,grouped_gender对象不存在,会直接触发NameError。 - 分组结果结构不符合绘图要求:
groupby(['Prod', 'Gender'])[['Prod']].count()默认会把Prod、Gender设为多级行索引,不会保留为普通列,seaborn无法读取到这两个字段作为绘图的x轴和分组维度。 - 绘图参数逻辑错误:设置
dodge=False会让不同性别的柱子完全重叠,无法实现分组柱状图的并排展示效果。
修正后可运行代码
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 分组统计:as_index=False会把分组字段保留为普通列,不设为索引 grouped_gender = main_data.groupby(['Prod', 'Gender'], as_index=False)['Prod'].count() # 重命名计数列,避免和原Prod字段混淆 grouped_gender = grouped_gender.rename(columns={'Prod': 'count'}) # 绘制分组柱状图 fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(10, 7)) barplot2 = sns.barplot( data=grouped_gender, x='Prod', y='count', hue='Gender', orient='v', ax=axes, ci=None, dodge=True # 开启柱子错位,同Prod下不同性别的柱子并排展示 ) plt.show()
简化写法提示:如果不需要提前留存分组统计结果,可以直接调用
sns.countplot()完成绘图,不需要手动做分组计数:sns.countplot(data=main_data, x='Prod', hue='Gender', ax=axes)
内容的提问来源于stack exchange,提问作者Alberto Alvarez
相关产品推荐
相关产品推荐

