刷新图形时使用pylab / matplotlib更新标签

时间:2016-08-31 02:29:11

标签: python matplotlib

我有一些标准的锅炉板代码,用于在每个条形图的顶部绘制一个带有“计数”标签的简单条形图。随着数据的变化,我正在更新此条形图。我能够成功实时更新图表。这是代码:

fig, ax = plt.subplots()
def my_graph():
    y_pos = np.arange(len(data_list))
    rects1 = ax.bar(y_pos, count_list, 0.28, color='r')
    # plt.bar(y_pos, count_list, 0.28, color='b', align='center', alpha=0.5)
    ax.set_xticks(y_pos, data_list)
    ax.set_xticklabels(data_list, rotation='vertical')
    ax.set_ylabel('Counts')
    ax.set_title('Some stats ')
    plt.plot()
    plt.ylim([0, 50])
    autolabel(rects1)

def autolabel(rects):
    # attach some text labels
    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x() + rect.get_width() / 2., 1.05 * height,
            '%d' % int(height), ha='center', va='bottom')

如您所见,标准锅炉板代码。我主要做的是:

if __name__ == "__main__":
    my_graph()
    plt.ion()
    while True:
        time.sleep(3)
        get_updated_data()
        my_graph()
        plt.pause(0.01)

get_updated_data将只提取新数据并调用代码生成图形。这是正确更新栏。但是,每个栏上方添加的标签不会被覆盖。每次刷新图形时,它们都会“堆叠”在彼此之上。什么是解决这个问题的适当方法?我试过fig.canvas.draw()但它没有用。也许我在错误的地方添加它。什么是正确的方法?

由于

1 个答案:

答案 0 :(得分:0)

一个选项是使用cla()每次迭代清除轴。或者,您可以存储每个文本对象,并在需要时将其删除。

t = ax.text(0.5,0.5,"label")
plt.pause(3)
t.remove()
fig.canvas.draw()