【问题标题】:Unintended extra bar and stacking in Matplotlib Bar GraphMatplotlib 条形图中意外的额外条形和堆叠
【发布时间】:2016-02-09 04:50:56
【问题描述】:

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

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)

当我传入数据时,它会生成以下图表。这完全符合我的意图 但是,当我传入一个包含数据集的最小值、平均值和最大值的数组时,它会在条形图上堆叠额外的东西,并且右侧有第四个条形图。我已将返回的条形列表的长度打印回来,len 为 3。

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

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

【问题讨论】:

  • 看起来新的情节与您之前的情节放在同一轴上,我通常在每个单独情节的开头做fig, ax = pyplot.subplots() 以确保我使用的是单独的数字,然后使用例如在该轴上绘制ax.bar().

标签: python matplotlib


【解决方案1】:

Marius 是正确的,因为您看到的条形图是因为您正在绘制之前的情节。只需在绘图函数的开头添加 pyplot.figure() 即可解决此问题;当未指定图形和/或轴时,大多数 pyplot 函数将在当前图形上运行,如果您刚刚创建了一个新图形,它将是新图形。

或者,如果您使用相同的图形(例如,如果您想在某些后端保留相同的窗口),您可以改用pyplot.cla() 来清除轴,或@ 987654323@清除整个图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2015-12-25
    • 2021-10-22
    • 2019-05-30
    • 2021-11-02
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多