Matplotlib绘制招募数据条形图:X轴年份重复、条形长度一致问题排查
问题排查:条形图X轴重复、长度一致的异常
核心原因分析
这种异常大概率是以下两种情况导致:
1. 绘图时误用原始全量数据,而非聚合结果
如果你的绘图代码是直接调用原始DataFrame的year列和目标变量列,比如:
# 错误示例 plt.bar(df['year'], df['recruit_score'])
原始数据中每个年份包含大量重复行,绘图时所有数据点会挤在对应年份位置,加上渲染逻辑问题,最终X轴只显示首个年份,且条形因重叠/平均呈现一致高度。
2. 年份列数据类型异常或存在大量无效值
若year列是字符串类型(如"2006"),或被批量填充为2006(比如缺失值处理错误),分组聚合时会仅生成2006一个分组,绘图自然全是该年份且条形长度一致。
修复步骤
- 检查并修正年份列类型:
# 查看年份列类型和唯一值 print(df['year'].dtype) print(df['year'].unique()) # 若为字符串,转换为数值并清理缺失值 df['year'] = pd.to_numeric(df['year'], errors='coerce') df = df.dropna(subset=['year'])
- 基于聚合后的数据绘图:
以绘制各年份目标变量均值为例,正确代码如下:
import matplotlib.pyplot as plt # 按年份分组计算统计量(可替换为sum、count等) yearly_stats = df.groupby('year')['recruit_score'].mean().reset_index() # 使用聚合结果绘图 plt.bar(yearly_stats['year'], yearly_stats['recruit_score']) plt.xlabel('年份') plt.ylabel('平均招募得分') plt.title('各年份橄榄球招募得分对比') plt.xticks(rotation=45) # 可选:避免年份标签重叠 plt.show()
- 提前验证聚合结果:
绘图前打印聚合后的数据,确认包含多年份且统计值有差异:
print(yearly_stats)
内容的提问来源于stack exchange,提问作者Walker
相关产品推荐
相关产品推荐

