我有一些标准的锅炉板代码,用于在每个条形图的顶部绘制一个带有“计数”标签的简单条形图。随着数据的变化,我正在更新此条形图。我能够成功实时更新图表。这是代码:
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()但它没有用。也许我在错误的地方添加它。什么是正确的方法?
由于
答案 0 :(得分:0)
一个选项是使用cla()每次迭代清除轴。或者,您可以存储每个文本对象,并在需要时将其删除。
t = ax.text(0.5,0.5,"label")
plt.pause(3)
t.remove()
fig.canvas.draw()