Sto creando un paio di grafici PDF con matplotlib che è composto da 400 sottotrame. Ognuno ha solo 5 punti dati. Ci vogliono 420 s su un buon computer per salvare 5 foto pdf. C'è un modo per ottimizzare il codice o è normale per matplotlib?matplotlib molto lento. È normale?
porzione di codice per il tracciato:
plot_cnt = 1
for k in np.arange(K_min, K_max + 1):
for l in np.arange(L_min, L_max + 1):
ax = plt.subplot(grid[0], grid[1], plot_cnt)
plot_cnt += 1
plt.setp(ax, 'frame_on', False)
ax.set_ylim([-0.1, 1.1])
ax.set_xlabel('K={},L={}'.format(k, l), size=3)
ax.set_xlim([-0.1, 4.1])
ax.set_xticks([])
ax.set_yticks([])
ax.grid('off')
ax.plot(np.arange(5), (data['S1']['Azimuth'][:, k - 1, l + offset_l] + \
data['S1']['Delta Speed'][:, k - 1, l + offset_l] + \
data['S1']['Speed'][:, k - 1, l + offset_l])/3,
'r-o', ms=1, mew=0, mfc='r')
ax.plot(np.arange(5), data['S2'][case][:, k - 1, l + offset_l],
'b-o', ms=1, mew=0, mfc='b')
plt.savefig(os.path.join(os.getcwd(), 'plot-average.pdf'))
plt.clf()
print 'Final plot created.'
Immagine finale:
400 sottotrame sembra molto per me. Anche se non si dispone di molti dati, Matplotlib potrebbe non essere ottimizzato per visualizzare questo tipo di griglie. – Simon
@Simon, è possibile tracciare usando un'unica grande sottotrama? Quindi ogni cinque dovrebbe essere collegato. Qualche idea? – rowman
Non ho l'ambiente giusto per eseguire i test, ma ci sono alcune cose che puoi fare. Il primo passo è eseguire il profiler sul tuo codice (vedi [qui] (http://stackoverflow.com/questions/582336/how-can-you-profile-a-python-script) per maggiori informazioni). Con questo, è possibile individuare dove viene trascorso il tempo. Le due cose che potresti provare è trovare qualche risorsa da rilasciare ad ogni passo, o creare i diagrammi in diversi processi usando [multiprocessing] (http://docs.python.org/library/multiprocessing.html). Se trovo il tempo, proverò a farlo, ma in questa fase non posso garantire nulla – Simon