如何在Seaborn中快速创建堆叠Countplot?无需手动统计
快速创建堆叠计数图(无需手动计数)
当然可以!你完全不用手动统计每个类别的计数值,用pandas配合matplotlib就能一步搞定这个需求,全程省去额外的计数步骤。针对你给出的数据集,我给你两种实用的实现方式:
方法一:Pandas内置堆叠条形图(最简方案)
Pandas的crosstab函数会自动帮你完成分组计数,直接生成适合堆叠图的格式,然后调用绘图方法即可:
import pandas as pd import matplotlib.pyplot as plt # 你的数据集 df = pd.DataFrame({'ID':[123,224,336,487,532,923, 987, 109, 289, 884], 'YOB':[1991, 1992, 1993, 1992, 1991, 1991, 1991, 1992, 1993, 1992], 'CoD':[1,1,2,2,1,2,2,1,2,1]}) # 自动计数+绘制堆叠图 count_table = pd.crosstab(df['YOB'], df['CoD']) ax = count_table.plot(kind='bar', stacked=True, figsize=(8,5)) # 美化图表 plt.title('Stacked Count of CoD by Year of Birth') plt.xlabel('Year of Birth') plt.ylabel('Total Count') plt.legend(title='CoD Category') plt.tight_layout() plt.show()
为什么这个方法好用?
pd.crosstab(df['YOB'], df['CoD'])会自动统计每个出生年份下,不同CoD类别的数量,完全不用你手动计算;- 只需要加上
stacked=True参数,就直接生成堆叠条形图,每个条形的高度对应该年份的总人数,不同颜色对应CoD的分类,完美展示CoD=1的占比和计数。
方法二:高亮CoD=1的堆叠图(突出目标类别)
如果你想重点突出CoD=1的部分,可以在绘图后给对应条形添加样式:
import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'ID':[123,224,336,487,532,923, 987, 109, 289, 884], 'YOB':[1991, 1992, 1993, 1992, 1991, 1991, 1991, 1992, 1993, 1992], 'CoD':[1,1,2,2,1,2,2,1,2,1]}) count_table = pd.crosstab(df['YOB'], df['CoD']) ax = count_table.plot(kind='bar', stacked=True, colormap='coolwarm', figsize=(8,5)) # 给CoD=1的条形添加斜线填充,突出显示 for patch in ax.patches: if patch.get_label() == '1': patch.set_hatch('//') patch.set_alpha(0.8) plt.title('Stacked Count of CoD by Year of Birth (CoD=1 Highlighted)') plt.xlabel('Year of Birth') plt.ylabel('Total Count') plt.legend(title='CoD Category') plt.tight_layout() plt.show()
这样处理后,CoD=1的部分会更醒目,一眼就能看到每个年份里CoD=1的人数占比和具体数量。
内容的提问来源于stack exchange,提问作者branwen85
相关产品推荐
相关产品推荐

