Python 带blit的Matplotlib动画--如何更新绘图标题?

Python 带blit的Matplotlib动画--如何更新绘图标题?,python,animation,matplotlib,blit,Python,Animation,Matplotlib,Blit,我使用matplotlib通过复制背景和光点设置绘图动画: 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 back

我使用matplotlib通过复制背景和光点设置绘图动画:

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)
我如何才能在每次更新情节时尽可能高效地更新情节标题

编辑:

在之前或之后

canvas.blit(ax.bbox)

不更新标题。我想我应该以某种方式重新绘制
标题
艺术家,或者我应该只捕获图形,因为
blit(ax.bbox)
覆盖了整个标题绘图区域,包括标题。

以下内容绘制了绘图并允许您进行更改

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()

下面绘制了绘图并允许您进行更改

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()

几年后,我突然说过去几天我也一直在这个问题上,禁用blit对我来说不是一个选择(因为fps会变得太慢)。至少对于matplotlib 3.1.3,如果将调整大小事件发送到画布,它会正确刷新背景并使用任何更新重新生成背景。因此,您可以通过检测何时需要更新标题来解决此问题,然后调用
fig.canvas.resize\u event()
强制刷新。希望这能帮助未来的人

几年后,我突然说过去几天我也一直在这个问题上,禁用blit对我来说不是一个选择(因为fps会变得太慢)。至少对于matplotlib 3.1.3,如果将调整大小事件发送到画布,它会正确刷新背景并使用任何更新重新生成背景。因此,您可以通过检测何时需要更新标题来解决此问题,然后调用
fig.canvas.resize\u event()
强制刷新。希望这能帮助未来的人

您可以使用
title.set_text(“第二个title”)
来更新标题。@Ed Smith不幸的是
title.set_text(“第二个title”)
不会更新标题,可能应该重新绘制标题文本艺术家?您好@Eugen Epure,您确实需要重新绘制,我添加了一个答案,并提供了一些示例来说明您可以使用
title.set_text(“第二个标题”)
更新标题。@Ed Smith不幸的是
标题。set_text(“第二个标题”)
不会更新标题,可能应该重新绘制标题文本艺术家?您好@Eugen Epure,您确实需要重新绘制,我添加了一个答案,并提供了一个简单的示例来说明这一点谢谢!当然可以,但是
plt.draw()
效率非常低。我尝试复制背景并使用
canvas.blit(ax.bbox)
(这将更新绘图速度至少快10-20倍),问题是在这种情况下标题没有更新,即使我调用
ax.draw\u artist(title)
.Hi@Eugen Epure,我猜
blit
不会假定标题会更改。最好使用带有
title=plt.text(5,11,'Second title')的文本来手动指定标题,然后更新。我认为blit可以与文本对象一起使用。谢谢!当然可以,但是
plt.draw()
效率非常低。我尝试复制背景并使用
canvas.blit(ax.bbox)
(这将更新绘图速度至少快10-20倍),问题是在这种情况下标题没有更新,即使我调用
ax.draw\u artist(title)
.Hi@Eugen Epure,我猜
blit
不会假定标题会更改。最好使用带有
title=plt.text(5,11,'Second title')的文本来手动指定标题,然后更新。我认为blit可以与文本对象一起使用。