Если вы используете бэкэнд Qt5Agg, вы действительно можете просто сделать то, что предлагает ошибка, а именно нарисовать холст один раз перед запуском l oop.
import time
import numpy as np
import matplotlib
matplotlib.use("Qt5Agg")
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.update()
fig.canvas.flush_events()
num_plots += 1
print(num_plots/5)
Однако я бы на самом деле использовал blit
вместо обновления PyQt
, чтобы оно работало с любым бэкэндом,
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)