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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:29