matplotlib.pyplot no olvidará los gráficos anteriores: ¿cómo puedo descargar / actualizar?

88

¿Cómo se consigue matplotlib.pyplot"olvidar" tramas anteriores

Estoy tratando de trazar varias veces usando matplotlib.pyplot

El código tiene este aspecto:

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

Desafortunadamente, sigo obteniendo el mismo gráfico (en realidad de algún otro código que ejecuté y completé hace un tiempo) sin importar lo que haga.

Un código similar me ha funcionado anteriormente.

He mirado estas preguntas:

¿Cómo "limpiar la pizarra"?

Matplotlib pyplot show () no funciona una vez cerrado

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

e intenté usarlo plt.show(), plt.clf()y fue plt.closeen vano.

¿Algunas ideas?

atomh33ls
fuente

Respuestas:

112

Preferiría usar plt.clf()después de cada plt.show()para borrar la cifra actual en lugar de cerrarla y volver a abrirla, manteniendo el tamaño de la ventana y brindándole un mejor rendimiento y un uso de memoria mucho mejor.

Del mismo modo, podría hacer plt.cla() para borrar los ejes actuales .

Para borrar un eje específico , útil cuando tiene varios ejes dentro de una figura, puede hacer, por ejemplo:

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

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

Descubrí que este comportamiento solo ocurre después de ejecutar un script en particular, similar al de la pregunta. No tengo idea de por qué ocurre.

Funciona (actualiza los gráficos) si pongo

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

después de cada plt.show()

atomh33ls
fuente