如何生成符合需求的按年份分组的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
相关产品推荐
相关产品推荐

