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

如何生成符合需求的按年份分组的case_status分布横向条形图?

我懂你想要的效果——按年份分组,每个年份下清晰展示不同case_status的分布对比,而你当前的代码生成的是把(year, case_status)每个组合都作为独立的条形,没有形成按年份的分组对比,看起来会比较零散对吧?

咱们来调整几种方案,你可以根据需求选:

方案1:用Pandas原生方法重塑数据后绘图

先把统计结果重新整理成「年份为行,case_status为列」的结构,再绘图就能得到分组效果:

# 统计每个年份各case_status的数量,unstack把case_status转为列,空值补0
status_counts = df.groupby('year')['case_status'].value_counts().unstack(fill_value=0)
# 绘制横向分组条形图(stacked=False是并列展示,改成True就是堆叠效果)
status_counts.plot.barh(stacked=False)

这样出来的图里,每一行对应一个年份,同一行里的不同条形就是该年份下各个case_status的数量对比,一目了然。

方案2:用Seaborn快速实现分组计数图

Seaborn的countplot可以直接帮你完成分组统计+绘图,代码更简洁:

import seaborn as sns
import matplotlib.pyplot as plt

# y轴是年份,hue按case_status区分颜色
sns.countplot(data=df, y='year', hue='case_status')
plt.title('Case Status Distribution by Year')
plt.xlabel('Number of Cases')
plt.ylabel('Year')
plt.show()

这个图会自动按年份分组,每个年份行里用不同颜色标注各个case_status的数量,视觉上非常清晰。

额外需求:展示占比而非数量

如果你想看每个年份里各case_status的占比,而不是绝对数量,可以这样处理:

# 计算每个年份各case_status的占比(转为百分比)
status_proportions = df.groupby('year')['case_status'].value_counts(normalize=True).unstack(fill_value=0) * 100
# 用堆叠横向条形图展示占比
status_proportions.plot.barh(stacked=True)
plt.xlabel('Percentage (%)')
plt.title('Case Status Proportion by Year')

内容的提问来源于stack exchange,提问作者jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:05:00