Matplotlib条形图中意外的额外条形和堆叠

时间:2016-02-09 04:50:57

标签: python matplotlib

我编写了以下函数,可以绘制我传入的浮点数组中的条形图。对于我在下面的示例中说明的第二种情况,它会产生奇怪的结果。是什么导致了额外的东西被吸引?

def create_plot(title, data, xlabels=None, colors=None):
    '''Plot the data as a bar chart'''
    if colors:
        bars = pyplot.bar(range(1, len(data) + 1), data, align='center', color=colors)
    else:
        pyplot.bar(range(1, len(data) + 1), data, align='center')

    pyplot.xlabel('X-axis')
    if xlabels:
        pyplot.xticks(range(1, len(data) + 1), xlabels)
    else:
        pyplot.xticks(range(1, len(data) + 1))
    pyplot.ylabel(r'Y-axis')
    pyplot.title(title)
    pyplot.axis([0, len(data) + 1, 0, max(data) + max(data) * 0.2])
    pyplot.grid(True)

    pyplot.show()
    pyplot.savefig('%s.png' % title)

当我传入数据时,它会生成以下图表。这完全符合我的预期enter image description here 然而,当我传入一个数据集的最小值,平均值和最大值的数组时,它会在条形图上堆叠额外的东西,右边是第4个条形图。我已经打印了返回条形列表的长度,len是3。

average = sum(data) / len(data)
stats = [min(data), average(data), max(data)]
create_plot("Title2", stats, ["minimum", "average", "maximum"], ["red", "green", "blue"])

enter image description here

在标有“最小”的红色条上,顶部有一些额外的蓝色条,即使我没有指定堆叠。在左边,有一个额外的半个酒吧。造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:0)

马吕斯是正确的,你看到的酒吧是因为你正在密谋你以前的阴谋。只需在绘图功能的开头添加pyplot.figure()即可解决此问题;当没有指定图形和/或轴时,大多数pyplot函数将对当前图形进行操作,如果您刚刚创建了一个新图形,则该图形将是新图形。

或者,如果你希望使用相同的数字(例如,如果你想在一些后端保持相同的窗口),你可以使用pyplot.cla()来清除轴,或plyplot.clf()清除整个数字。