Matplotlib中plt.bar柱状图偏左及left参数与文档不符问题的解决
哈哈,这两个Matplotlib柱状图的坑我之前踩过,给你详细说下怎么解决:
问题1:修复plt.bar绘制的柱状图偏左问题
柱状图偏左大多是因为x轴的自动缩放逻辑没适配柱子的位置,或者柱子和刻度没对齐。给你几个实用的解决思路:
- 手动调整x轴范围:用
plt.xlim()直接定义x轴的显示区间。比如单根柱子x=0的话,设置plt.xlim(-0.5, 0.5)就能把柱子居中显示;如果是多组数据,就根据x的最大值和最小值来扩展范围,比如x是[0,1,2],可以设plt.xlim(-0.8, 2.8),避免柱子贴左边缘。 - 对齐柱子+绑定刻度:默认
align='center'会让柱子中心对齐x值,但如果x轴刻度没对应上,就会显得偏。可以手动把刻度和x值绑定,比如:import matplotlib.pyplot as plt x = [0] heights = [1] plt.bar(x, heights, align='center') plt.xticks(x) # 让x轴刻度精准对应柱子位置 plt.show() - 如果是单根柱子,也可以直接把x值设为一个更居中的位置,但前两种方法更通用,适配多组数据的情况。
问题2:修复plt.bar的left参数与实际显示位置不符的问题
你说的这个情况完全是因为默认对齐方式在搞鬼!Matplotlib 2.0.0里plt.bar的默认align参数是'center'——这个参数会把柱子的中心对齐到你传入的left值上,所以实际左边缘就是left - width/2(默认width是0.8,所以0 - 0.8/2 = -0.4),这就和文档里说的“左边缘是left”不符了。
要让柱子严格按照文档定义的边缘位置绘制,只需要把align设为'edge'就行,代码示例:
import matplotlib.pyplot as plt plt.bar(0, 1, align='edge') # 此时柱子左边缘就是0,右边缘是0+0.8=0.8 plt.xlim(-0.1, 0.9) # 调整x轴范围,方便看清完整柱子 plt.grid(axis='x', linestyle='--') # 加网格线更直观 plt.show()
这样画出来的柱子就完全符合文档里描述的矩形边界了。如果需要右边缘对齐到left值,还可以用负的width配合align='edge',不过一般正width加align='edge'就够解决你的问题啦。
内容的提问来源于stack exchange,提问作者serv-inc
相关产品推荐
相关产品推荐

