matplotlib.pyplot non dimenticherà le trame precedenti: come posso scaricare / aggiornare?


89

Come si fa matplotlib.pyplota "dimenticare" le trame precedenti

Sto cercando di tracciare più volte usando matplotlib.pyplot

Il codice ha questo aspetto:

def plottest():
    import numpy as np
    import matplotlib.pyplot as plt


    a=np.random.rand(10,)
    b=np.random.rand(10,)
    c=np.random.rand(10,)


    plt.plot(a,label='a')
    plt.plot(b,label='b')
    plt.plot(c,label='c')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

    e=np.random.rand(10,)
    f=np.random.rand(10,)
    g=np.random.rand(10,)


    plt.plot(e,label='e')
    plt.plot(f,label='f')
    plt.plot(g,label='g')
    plt.legend(loc='upper left')
    plt.ylabel('mag')
    plt.xlabel('element)')
    plt.show()

Sfortunatamente continuo a ottenere la stessa trama (in realtà da qualche altro codice che ho eseguito e completato qualche tempo fa) indipendentemente da quello che faccio.

Un codice simile ha funzionato in precedenza per me.

Ho esaminato queste domande:

Come "pulire la lavagna"?

Matplotlib pyplot show () non funziona una volta chiuso

(python) matplotlib pyplot show () .. blocco o no?

e ho provato a usare plt.show(), plt.clf()e plt.closesenza alcun risultato.

Qualche idea?

Risposte:


114

Preferirei usare plt.clf()dopo ogni plt.show()per cancellare la cifra corrente invece di chiuderla e riaprirla, mantenendo le dimensioni della finestra e dandoti prestazioni migliori e un utilizzo della memoria molto migliore.

Allo stesso modo, potresti plt.cla() semplicemente cancellare gli assi correnti .

Per cancellare un asse specifico , utile quando hai più assi all'interno di una figura, potresti fare ad esempio:

fig, axes = plt.subplots(nrows=2, ncols=2)

axes[0, 1].clear()

48

Ho scoperto che questo comportamento si verifica solo dopo aver eseguito uno script particolare, simile a quello nella domanda. Non ho idea del motivo per cui si verifica.

Funziona (aggiorna i grafici) se metto

plt.clf()
plt.cla()
plt.close()

dopo ogni plt.show()

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.