首页 > 解决方案 > Matplotlib:图标题不更新?

问题描述

我需要制作一个绘图并多次更新(100 次或 1000 次),所以我需要 Python 快速更新它。我找到了一个很好的解决方案,但我不允许添加评论。

这是参考答案的代码:

import time
import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
line, = ax.plot(np.random.randn(100))

fig.canvas.draw()
plt.show(block=False)


tstart = time.time()
num_plots = 0
while time.time()-tstart < 5:
    line.set_ydata(np.random.randn(100))
    ax.draw_artist(ax.patch)
    ax.draw_artist(line)
    fig.canvas.blit(ax.bbox)
    fig.canvas.flush_events()
    num_plots += 1
print(num_plots/5)

为了获得完美的解决方案,除了线条之外,我还需要更新情节的标题。例如,我想在图的标题中打印迭代编号(或循环的一些计数器)。

这个怎么做?

我尝试在 while 循环中更新图形的标题,但标题会打印 num_plots 的第一个值,然后是最后一个值,中间没有任何内容。更具体地说,我添加了

ax.set_title('num_plots = ' + str(num_plots))

作为 while 循环内的最后一行,它会导致这种行为,您可以看到标题仅在循环结束时更新(即使指令在其中): 单击此处查看动画 gif

标签: pythonperformancematplotliboptimizationblit

解决方案


您可以在返回的文本对象中设置字符串title,就像在 plot 返回的 line 对象中设置 ydata 一样:

titl = ax.set_title('')
while time.time()-tstart < 5:
   ...
   titl.set_text(f'num_plots = {num_plots}')

推荐阅读