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
相关产品推荐
相关产品推荐

