Matplotlib柱状图横轴无法显示全部值名称的问题排查与解决
问题排查与解决:Matplotlib柱状图横轴年份显示不全+未定义变量报错
下面是针对你代码中两个问题的具体解决方法:
1. 先解决year_percentages未定义的报错
代码里直接使用了year_percentages但未提前定义,需要基于top_12的计数计算对应百分比,添加以下代码即可:
year_percentages = (top_12 / top_12.sum()) * 100
2. 解决横轴年份显示不全的问题
横轴无法显示全部12个年份,多是Matplotlib自动优化刻度导致的,以下是几种可行的解决方式:
- 方法一:强制指定所有刻度标签
通过plt.xticks明确绑定每个柱子对应的年份标签,确保全部显示:
plt.xticks(ticks=range(len(top_12)), labels=top_12.index, rotation=45, ha='right')
- 方法二:将年份索引转为字符串类型
如果年份是数值类型(如int),Matplotlib会把它当作连续数值处理,自动跳过部分刻度。转为字符串后,每个值会被当作独立类别显示:
top_12.index = top_12.index.astype(str)
- 方法三:调大图表宽度
若图表宽度不足,标签会被挤压隐藏,可增加figsize的宽度值:
plt.figure(figsize=(12, 6)) # 把原宽度10调整为12,给标签预留更多空间
修正后的完整代码
year_counts = bi['year'].value_counts() top_12 = year_counts.nlargest(12) # 新增:计算各年份占比 year_percentages = (top_12 / top_12.sum()) * 100 # 调大图表宽度,优化标签显示空间 plt.figure(figsize=(12, 6)) bars = plt.bar(top_12.index, top_12.values, color='skyblue') for bar, percentage in zip(bars, year_percentages): height = bar.get_height() plt.text(bar.get_x() + bar.get_width() / 2, height, f'{percentage:.2f}%', ha='center', va='bottom') # 强制显示所有年份标签 plt.xticks(ticks=range(len(top_12)), labels=top_12.index, rotation=45, ha='right') plt.xlabel('Year') plt.ylabel('Count') plt.title('Bar Graph of Top 12 Year Counts with Percentages') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者Yasmin Sayed
相关产品推荐
相关产品推荐

