matplotlib.pyplot não esquecerá os gráficos anteriores - como posso liberar / atualizar?


88

Como você consegue matplotlib.pyplot"esquecer" plotagens anteriores

Estou tentando plotar várias vezes usando matplotlib.pyplot

O código é parecido com este:

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

Infelizmente, continuo obtendo o mesmo gráfico (na verdade, de algum outro código que executei e concluí há um tempo), não importa o que eu faça.

Código semelhante funcionou anteriormente para mim.

Eu olhei para estas questões:

Como "limpar a lousa"?

Matplotlib pyplot show () não funciona depois de fechado

(python) matplotlib pyplot show () .. bloqueando ou não?

e tentei usar plt.show(), plt.clf()e plt.closesem sucesso.

Alguma ideia?

Respostas:


112

Eu prefiro usar plt.clf()depois de cada plt.show()para apenas limpar a figura atual em vez de fechá-la e reabri-la, mantendo o tamanho da janela e dando a você um melhor desempenho e uso de memória muito melhor.

Da mesma forma, você poderia fazer plt.cla() apenas para limpar os eixos atuais .

Para limpar eixos específicos , útil quando você tem vários eixos em uma figura, você pode fazer, por exemplo:

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

axes[0, 1].clear()

47

Descobri que esse comportamento só ocorre depois de executar um script específico, semelhante ao da pergunta. Não tenho ideia de por que isso ocorre.

Funciona (atualiza os gráficos) se eu colocar

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

depois de cada plt.show()

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.