如何在柱状图中去除柱子之间的间隙

41
我正在使用Matplotlib制作一个条形图,调用方式如下:
xs.bar(bar_lefts, bar_heights, facecolor='black', edgecolor='black')

我得到了一个看起来像这样的柱状图:

Bar chart with gaps

我想要的是没有连续条之间的白色间隙的图表,例如更像这样:

enter image description here

有没有办法在Matplotlib中使用bar()函数来实现这个?
4个回答

60
bar()函数中添加width=1.0关键字参数,例如:xs.bar(bar_lefts, bar_heights, width=1.0, facecolor='black', edgecolor='black')。这将使柱状图的间隙垂直填充。

宽度 =?该代码段发生错误,因为宽度没有作为关键字参数给出,而是作为变量(该变量不存在)。 - Bryce Thomas
@Bryce Thomas:如果你只写width,它会被认为是width=1(我觉得这样可以)。所以,使用width=1,它是否按照你想要的方式工作? - George
很好,我很惊讶它在你那里居然能工作。在我的系统上,它几乎是一个语法错误,因为该语言将width解释为非命名参数,并且显然在我的程序中找不到任何名为width的变量。是的,width=1似乎做到了我想要的。 - Bryce Thomas
linewidth=0.0width=1.0 设置将删除条形图的边缘线。这样做可以消除在我处理10000多个数据点时出现的条形之间(视觉上呈现为灰色)的空隙。 - pds

7
自此问题被提出已经8年了,现在matplotlib API已经有内置方法来生成填充的、没有间隙的条形图:使用参数fill=Truepyplot.step()pyplot.stairs()

请参见文档进行更全面的比较,但主要区别在于,step()plot()一样使用N个x值和N个y值定义步进位置,而stairs()使用N个高度和N+1个边缘定义步进位置,就像hist()返回的那样。这是一个微妙的区别,我认为这两个工具可以创建相同的输出。

谢谢。Bar可以工作,但即使将条形码宽度设置为1,它在保存的PDF中仍会留下一些几乎不可见的间隙。 - Yiding

1

只需将宽度设置为条形数量的倒数即可,因此:

width = 1 / len(bar_lefts)
xs.bar(bar_lefts, bar_heights, width=width, color='black')

0

您可以将宽度设置为两个条之间的距离:

width = bar_lefts[-1] - bar_lefts[-2]
xs.bar(bar_lefts, bar_heights, width=width)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接