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

如何绘制顺序正确的分组条形图 解决测试熟练度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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:06:03