103 votes

matplotlib.pyplot n'oublie pas les tracés précédents - comment puis-je purger/rafraîchir ?

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

J'essaie de tracer des temps multiples 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 tracé (provenant en fait d'un autre code que j'ai exécuté et terminé il y a un certain temps), quoi que je fasse.

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

Je me suis penché sur ces questions :

Comment "nettoyer l'ardoise" ?

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

(python) matplotlib pyplot show() blocage ou pas ?

et j'ai essayé d'utiliser plt.show() , plt.clf() y plt.close en vain.

Des idées ?

127voto

Saullo Castro Points 12260

Je préfère utiliser plt.clf() après chaque plt.show() a effacez simplement le chiffre actuel au lieu de la fermer et de la rouvrir, en conservant la taille de la fenêtre et en vous offrant de meilleures performances et une meilleure utilisation de la mémoire.

De même, vous pourriez faire plt.cla() pour effacer l'actuel axes .

Pour effacer un axes Cette fonction est utile lorsque vous avez plusieurs axes dans une même figure, par exemple :

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

axes[0, 1].clear()

60voto

atomh33ls Points 2461

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 la raison pour laquelle cela se produit.

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

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

après chaque plt.show()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X