Вот модифицированная версия вашего кода, которая использует интерактивный режим matplotlib
.
import matplotlib.pyplot as plt
import numpy as np
import time
# User input
N_chunk = 10000
N_iter = 100
# Prepare data
xx = np.arange(N_chunk)
yy = np.random.rand(N_chunk)
# Prepare plot
fig, ax = plt.subplots()
#ax.set_xlim([0,N_chunk]) # observe only the first chunk
line = ax.plot(xx,yy,'-o')
plt.ion() # set interactive mode
fig.show()
# Appending data
dts = []
for i in range(N_iter):
t0 = time.time()
xs = xx[-1]+1
xx=np.arange(xs,xs+N_chunk)
yy=np.random.rand(N_chunk)
line=ax.plot(xx,yy,'-o')
fig.canvas.draw()
dt = time.time() - t0
dts.append(dt)
plt.pause(1e-10)
plt.close()
# Plot the time spent for every redraw
plt.plot(range(N_iter), dts, '-o')
plt.xlabel('Number of times a portion is added')
plt.ylabel('Redraw time [sec]')
plt.grid()
plt.show()
С раскомментированным ax.set_xlim
время перерисовки:
С другой стороны, с ax.set_xlim
прокомментировано :
Понятно, звоню fig.canvas.draw()
редр aws все. В вашем случае, комментируя ax.set_xlim([0,N_chunk])
, вы перерисовываете такие вещи, как границы осей, метки и т. Д. c. Вы хотите исследовать блиттинг, как описано в этом SO , чтобы избежать перерисовки объектов осей.