Matplotlib: заголовок рисунка не обновляется? - PullRequest
0 голосов
/ 04 августа 2020

Мне нужно сделать график и обновить его много раз (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)

Чтобы получить свое идеальное решение Мне также нужно обновить заголовок сюжета помимо строк. Например, я хотел бы напечатать номер итерации (или какой-либо счетчик для l oop) в заголовке рисунка.

Как это сделать?

Я попытался обновить заголовок фигуры внутри while l oop, но заголовок печатает первое значение num_plots, а затем последнее, ничего между ними. В частности, я добавил

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

в качестве последней строки внутри while l oop, и это приводит к такому поведению, при котором вы можете видеть, что заголовок обновляется только в конце l oop (даже если инструкция находится внутри него): нажмите здесь, чтобы увидеть анимированный gif

1 Ответ

0 голосов
/ 04 августа 2020

Вы можете установить строку в текстовом объекте, возвращаемом title, точно так же, как вы устанавливаете ydata в строковом объекте, возвращаемом plot:

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