Python matplotlib条形图中高度为零的强制存储箱

Python matplotlib条形图中高度为零的强制存储箱,python,matplotlib,Python,Matplotlib,考虑以下脚本: import pylab counts = [0,0,0,125,56,0,0,0,34,77,123,0,0,0] pylab.bar(*zip(*enumerate(counts)), align='center') pylab.show() 当我运行这个程序时,我得到如下图像。 如您所见,未打印打印打印边缘处的0高度箱子。然而,我确实希望他们被策划。我能做些什么来实现这一点 我知道我可以设置轴的x_lim(axes.set_xlim)。如果不存在其他选项,那么哪种方法最

考虑以下脚本:

import pylab
counts = [0,0,0,125,56,0,0,0,34,77,123,0,0,0]
pylab.bar(*zip(*enumerate(counts)), align='center')
pylab.show()
当我运行这个程序时,我得到如下图像。

如您所见,未打印打印打印边缘处的0高度箱子。然而,我确实希望他们被策划。我能做些什么来实现这一点


我知道我可以设置轴的x_lim(
axes.set_xlim
)。如果不存在其他选项,那么哪种方法最优雅地考虑了钢筋的宽度?

一种方法类似于以下内容:

import pylab
counts = [0,0,0,125,56,0,0,0,34,77,123,0,0,0]
artists = pylab.bar(*zip(*enumerate(counts)), align='center')

lefts = [item.get_x() for item in artists]
rights = [item.get_x() + item.get_width() for item in artists]
pylab.xlim([min(lefts), max(rights)])

pylab.show()

找到了另一种可能比
set\xlim
更可靠的解决方案:

import pylab
counts = [0,0,0,125,56,0,0,0,34,77,123,0,0,0]
# add a epsilon to counts to force bins to be plotted
epsilon = 1e-7
counts = [x+epsilon for x in counts]
pylab.bar(*zip(*enumerate(counts)), align='center')
pylab.show()

我不明白你的意思。。。是否要将高度为0的条形图绘制为其他高度,更改条形图的y限制,使0不在底部,或更改图形的x限制?@JoeKington我承认,不能绘制高度为零的矩形。但我希望x轴不会自动去除绘图输入数据边缘的零位值。很明显,13位仍然被去除?另一方面,您可以更改零位。例如,
counts=np.array([0125,…,0],dtype=np.float)
然后
counts[counts==0]=1e-7
。实际上,您将0设置为其他(小)值的方法可能是最干净的方法。@JoeKington不幸的是,您仍然可以看到面片的边缘线(如果您非常挑剔的话)。