matplotlib.pyplot n'oubliera pas les graphiques précédents - comment puis-je vider / actualiser?

88

Comment matplotlib.pyplot"oublier" les parcelles précédentes

J'essaie de tracer plusieurs fois en utilisant matplotlib.pyplot

Le code ressemble à ceci:

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()

Malheureusement, je continue à obtenir le même complot (en fait à partir d'un autre code que j'ai exécuté et terminé il y a quelque temps), quoi que je fasse.

Un code similaire a déjà fonctionné pour moi.

J'ai examiné ces questions:

Comment "nettoyer l'ardoise"?

Matplotlib pyplot show () ne fonctionne pas une fois fermé

(python) matplotlib pyplot show () .. bloquant ou pas?

et essayé d'utiliser plt.show(), plt.clf()et plt.closeen vain.

Des idées?

atomh33ls
la source

Réponses:

113

Je préférerais utiliser plt.clf()après chaque plt.show()pour effacer simplement la figure actuelle au lieu de la fermer et de la rouvrir, en gardant la taille de la fenêtre et en vous offrant de meilleures performances et une bien meilleure utilisation de la mémoire.

De même, vous pouvez plt.cla() simplement effacer les axes actuels .

Pour effacer un axe spécifique , utile lorsque vous avez plusieurs axes dans une seule figure, vous pouvez par exemple faire:

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

axes[0, 1].clear()
Saullo GP Castro
la source
47

J'ai découvert que ce comportement ne se produit qu'après l'exécution d'un script particulier, similaire à celui de la question. Je n'ai aucune idée de pourquoi cela se produit.

Cela fonctionne (rafraîchit les graphiques) si je mets

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

après chaque plt.show()

atomh33ls
la source