我使用matplotlib为一个情节设置动画,方法是复制背景和blitting:
clm01
我会定期更新情节:
f = Figure(tight_layout=True)
canvas = FigureCanvasTkAgg(f, master=pframe)
canvas.get_tk_widget().pack()
ax = f.add_subplot(111)
# Set inial plot title
title = ax.set_title("First title")
canvas.show()
# Capture the background of the figure
background = canvas.copy_from_bbox(ax.bbox)
line, = ax.plot(x, y)
canvas._tkcanvas.pack()
每次更新情节时,如何尽可能高效地更新情节标题?
编辑:
# How to update the title here?
line.set_ydata(new_data)
ax.draw_artist(line)
canvas.blit(ax.bbox)
之前或之后
title.set_text("New title")
ax.draw_artist(title)
不会更新标题。我想我应该重新绘制canvas.blit(ax.bbox)
艺术家,或者我应该只捕获图表,因为title
会覆盖整个标题图区域,包括标题。
答案 0 :(得分:0)
几年后突然出现这样的说法,说我最近几天也一直在这个问题上受阻,禁用blit对我来说不是一个选择(因为fps会变得太慢了)。至少对于matplotlib 3.1.3,如果您将调整大小事件发送到画布,它将正确刷新背景并使用任何更新重新生成背景。因此,您可以通过检测何时需要更新标题,然后调用fig.canvas.resize_event()
强制刷新来解决此问题。希望这对将来的人有帮助!
答案 1 :(得分:-1)
以下绘制情节并允许您进行更改
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1,1)
ax.plot(np.linspace(0.,10.,100))
title = ax.set_title("First title")
plt.show(block=False)
然后可以使用
更新标题title.set_text("Second title")
plt.draw()