如何绘制顺序正确的分组条形图 解决测试熟练度EOY标签错配问题
问题解决方法
核心原因是groupby生成的统计结果默认按照索引的字典序排序,和你手动指定的x轴标签顺序不一致,导致EOY的数值和标签对应错位。你只需要在统计完占比后,手动将两个占比序列按照指定的标签顺序重排即可。
完整修改后代码
import matplotlib.pyplot as plt import numpy as np # 原有统计逻辑 bush_prof_boy = bush.groupby(['BOY Prof'])['BOY Prof'].count() bush_prof_pct_boy = bush_prof_boy/bush['BOY Prof'].count() * 100 bush_prof_eoy = bush.groupby(['EOY Prof'])['EOY Prof'].count() bush_prof_pct_eoy = bush_prof_eoy/bush['EOY Prof'].count() * 100 labels = ['Remedial', 'Below Proficient', 'Proficient', 'Advanced'] # 核心修改:按指定的标签顺序重排数据,保证数值和x轴标签一一对应 bush_prof_pct_boy = bush_prof_pct_boy.reindex(labels) bush_prof_pct_eoy = bush_prof_pct_eoy.reindex(labels) # 补充代码中缺失的位置、柱宽定义,同时提前指定画布尺寸 x = np.arange(len(labels)) width = 0.35 fig, ax = plt.subplots(figsize=(12,7)) rects1 = ax.bar(x - width/2, bush_prof_pct_boy, width, label='BOY', color='mediumorchid') rects2 = ax.bar(x + width/2, bush_prof_pct_eoy, width, label='EOY', color='teal') ax.set_ylabel('% of Students at Proficiency Level', fontsize=18) ax.set_title('Bushwick Middle Change in Proficiency Levels', fontsize=25) ax.set_xticks(x) ax.set_xticklabels(labels, fontsize=25) ax.legend(fontsize=25) plt.yticks(fontsize=15) plt.show()
额外优化说明
原有代码中写在plt.show()前面的plt.figure(figsize=(5,15))是无效的,需要在创建子图时就通过figsize参数指定画布尺寸,同时5:15的比例过于狭长,调整为12:7的比例更适配分组柱状图的展示。
内容的提问来源于stack exchange,提问作者Sarah Savage
相关产品推荐
相关产品推荐

