Matplotlib Y轴数据显示异常求助:条形图超出数据范围
Matplotlib条形图Y轴显示异常问题解决
你遇到的Y轴显示异常,本质是两个问题:
- 手动设置的
ylim(0,2)没生效,反而显示0.5-1.0的范围 - Y轴出现了1.0,但你误以为数据里没有这个值
问题原因
- 你把
ax.set_ylim(0, 2)放在了绘制条形图的代码前面,Matplotlib默认会自动调整坐标轴范围以适配所有绘制元素,所以你提前设置的范围被自动覆盖了。 - Y轴出现1.0是因为条形的顶部是
bottom + height,计算后第一个条形的顶部为0.5002 + 0.5047 ≈ 1.0049,刚好超过1.0,其他条形的顶部也接近1.0,所以自动缩放后的Y轴上限就被设为了1.0。
解决方法
方法1:调整代码顺序,把ylim设置放在绘图之后
手动设置的范围会覆盖自动缩放的结果:
fig, ax = plt.subplots() x = [0, 1, 2, 3, 4] height = [0.5047, 0.4999, 0.4985, 0.4999, 0.4987] bottom = [0.5002, 0.4969, 0.4956, 0.4969, 0.4967] # 先绘制条形图 ax.bar(x=x, height=height, width=0.2, bottom=bottom) # 再设置Y轴范围 ax.set_ylim(0, 2) plt.show()
方法2:关闭自动缩放,强制保留手动设置的范围
在设置ylim之后关闭自动缩放,绘图时就不会修改你设置的坐标轴范围:
fig, ax = plt.subplots() x = [0, 1, 2, 3, 4] height = [0.5047, 0.4999, 0.4985, 0.4999, 0.4987] bottom = [0.5002, 0.4969, 0.4956, 0.4969, 0.4967] ax.set_ylim(0, 2) # 关闭自动缩放 ax.autoscale(False) # 再绘制条形图 ax.bar(x=x, height=height, width=0.2, bottom=bottom) plt.show()
内容的提问来源于stack exchange,提问作者u1516512562156
相关产品推荐
相关产品推荐

