2016-02-09 115 views
0

我写了下面的函数,可以从我传入的一个浮动数组中绘制条形图。我在下面的例子中说明了第二种情况。什么导致额外的东西被绘制?意外的额外酒吧和在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

上标有“最低限度”的红酒吧,还有顶部一些额外的蓝条,甚至尽管我没有指定堆叠。在左边,有一个额外的半条。这是什么造成的?

+0

看起来新的情节正在和你之前的情节放在同一个轴上,我通常在每个独立情节的开始处都做'fig,ax = pyplot.subplots()',以确保我使用单独的图,然后使用例如在该轴上进行绘图'ax.bar()'。 – Marius

回答

0

马吕斯是正确的,因为你看到的酒吧是因为你正在绘制你以前的情节。简单地将pyplot.figure()添加到绘图函数的开头即可解决此问题;当没有指定图形和/或轴时,大多数pyplot函数将在当前数字上运行,如果您刚创建一个新图形,它将是新图形。

另外,如果你使用相同的数字(例如,如果你想保留一些后端同一窗口),您可以改用pyplot.cla()清除轴或plyplot.clf()清除整个身影。

相关问题