在matplotlib条形图中强制零高度的箱子

moo*_*eep 4 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()
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到以下图像. 条形图

如您所见,未绘制绘图边缘的0高度分档.但是,我确实希望它们能够被绘制出来.我能做些什么来实现这个目标?

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

Joe*_*ton 5

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

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


moo*_*eep 5

找到了另一个可能比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()
Run Code Online (Sandbox Code Playgroud)

条形图