2012-08-28 12 views
5

sto usando un ciclo per generare campi vettoriali su una mappa di base in quanto tale:usando faretra di matplotlib in un ciclo in modo efficiente

for i in range(365): 
    barbs = m.quiver(x, y, u[i, :], v[i, :], scale = 100) 
    plt.draw() 
    barbs.remove() 

Il programma prende drasticamente più memoria a ogni ciclo. C'è un modo per aggirare questo? Come cancellare completamente i barbe alla fine di ogni loop?

+0

Perché li disegni e poi li rimuovi? Un modo per velocizzare i grafici consiste nel costruirli per primi, quindi richiamare il disegno alla fine, con la modalità interattiva disattivata, chiamando ioff(). Il tuo esempio è lontano da questo, ma poiché è incompleto, è difficile indovinare cosa vuoi. – tom10

risposta

4

Se è necessario ripristinare solo i componenti (u, v), è possibile utilizzare barb.set_UVC(newU,newV,newC) all'interno del ciclo.

barbs = m.quiver(x, y, u[0, :], v[0, :], scale = 100) 
for i in range(365): 
    barbs.set_UVC(u[i,:],v[i,:]) 
    #save the figure or something 

anche vedere Python: copy basemap or remove data from figure, Visualization of 3D-numpy-array frame by frame,

Se si sta cercando di creare un'animazione, guardare nel al modulo animation di matplotlib, si prende cura di un sacco di dettagli per voi.

Problemi correlati