如何用Python的group by绘制分组柱状图?含非手动统计及多分类场景
双列(多列)分组柱状图实现方案
首先先把你提供的原始数据整理出来:
color type price Y/N 1 R A H Y 2 G B L N 3 B A H N 4 R C L N 5 G B H Y 6 R A H Y 7 B B H Y
一、二元分类(Y/N)场景:无需手动统计的简便实现
完全不需要手动统计各类别数量!用Python的seaborn或者pandas+matplotlib就能自动完成计数和绘图,非常省心。
方法1:用Seaborn的countplot(最简便)
Seaborn的countplot会自动帮你统计每个类别下的频数,配合hue参数就能实现按Y/N分组的双列柱状图:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 读取你的数据 data = pd.DataFrame({ 'color': ['R', 'G', 'B', 'R', 'G', 'R', 'B'], 'type': ['A', 'B', 'A', 'C', 'B', 'A', 'B'], 'price': ['H', 'L', 'H', 'L', 'H', 'H', 'H'], 'Y/N': ['Y', 'N', 'N', 'N', 'Y', 'Y', 'Y'] }) # 设置绘图风格 sns.set_style("whitegrid") # 绘制双列柱状图:x选你要展示的类别列(比如type),hue按Y/N分组 sns.countplot(x='type', hue='Y/N', data=data) # 添加标题和标签 plt.title('Count of Type Grouped by Y/N') plt.xlabel('Type') plt.ylabel('Count') plt.legend(title='Y/N') plt.show()
这段代码会自动统计每个type下Y和N的数量,生成你想要的双列柱状图,完全不用手动计算频数。
方法2:用Pandas的crosstab+plot.bar
如果你更习惯用Pandas,也可以用crosstab生成交叉统计表,再直接调用绘图方法:
# 生成交叉统计表:行是type,列是Y/N,值为计数 cross_tab = pd.crosstab(data['type'], data['Y/N']) # 绘制双列柱状图 cross_tab.plot(kind='bar', figsize=(8, 5)) plt.title('Count of Type Grouped by Y/N') plt.xlabel('Type') plt.ylabel('Count') plt.legend(title='Y/N') plt.show()
同样不需要手动统计,Pandas会自动完成计数。
二、非二元分类(4种取值)场景的实现
当你的分组列(原Y/N列)有4种不同取值时,方法和二元场景几乎一样,只需要保持代码逻辑不变,工具会自动适配多分类的情况:
示例(假设分组列是4种取值:['Y', 'N', 'M', 'O'])
# 模拟4种取值的分组列数据 data['group'] = ['Y', 'N', 'M', 'O', 'Y', 'M', 'N'] # 用Seaborn绘制多列柱状图 sns.countplot(x='type', hue='group', data=data) plt.title('Count of Type Grouped by 4 Categories') plt.xlabel('Type') plt.ylabel('Count') plt.legend(title='Group') plt.show() # 或者用Pandas的方式 cross_tab_multi = pd.crosstab(data['type'], data['group']) cross_tab_multi.plot(kind='bar', figsize=(8, 5)) plt.title('Count of Type Grouped by 4 Categories') plt.xlabel('Type') plt.ylabel('Count') plt.legend(title='Group') plt.show()
这样每个类别(比如type的A/B/C)下面会生成4个柱子,分别对应4种分组取值的数量,完全不需要额外修改核心逻辑。
总结一下:不管是二元还是多元分类,只要用seaborn.countplot(带hue参数)或者pandas.crosstab+plot.bar,都能自动完成计数和分组绘图,不用手动统计各类别数量,非常高效!
内容的提问来源于stack exchange,提问作者Haliris
相关产品推荐
相关产品推荐

