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

matplotlib绘制pandas条形图多生成1根柱子且x轴标签不居中问题

问题根源

你调用pandas的plot.bar()方法时没有指定要绘制的y轴字段,pandas默认会把DataFrame里所有数值类型的列都作为独立的柱子序列绘制:

  • 排序后的数据x包含两个数值列:TIME(全为2016,数值极低)和Value(实际需要绘制的GDP数值)
  • 两组柱子在每个x轴位置上默认会并排展示,你设置了超大的width=2导致两组柱子大面积重叠,其中TIME对应的所有柱子高度都只有2016,几乎贴在x轴底部,你看到的最左侧"多出来的柱子"其实就是整组TIME柱子最左侧的那根,后续的TIME柱子和Value柱子重叠后容易被误认为是x轴的边框装饰
  • 同时多组柱子的默认x轴刻度位置会自动偏移,和你手动设置的plt.xticks位置不匹配,就出现了标签和柱子对不齐的问题

修复方案

仅需要修改绘图调用的代码,显式指定y轴为Value,同时把柱子宽度调整为合理值即可:

# 把原来的绘图行替换为下面这行
x.plot(kind='bar', y='Value', width=0.8, color='darkblue', edgecolor='white', ax=axe, legend=False)

修改后就只会生成54根对应Value的柱子,x轴标签也会自动和柱子对齐。

可选优化

如果想省去手动设置xticks的步骤,可以在排序后把索引替换为LOCATION列:

x = df1.sort_values('Value', ascending=True).set_index('LOCATION')

后续不需要再写plt.xticks([i for i in range(len(names))], names, rotation=90)这行代码,pandas会自动把索引值作为x轴刻度标签。

内容的提问来源于stack exchange,提问作者MarkS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:30:00