matplotlib.pyplot не забуде попередні графіки - як я можу змити / оновити?


88

Як ви можете matplotlib.pyplot"забути" попередні сюжети

Я намагаюся побудувати графік кілька разів, використовуючи matplotlib.pyplot

Код виглядає так:

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

На жаль, я продовжую отримувати той самий сюжет (насправді з якогось іншого коду, який я запускав і завершував деякий час тому), що б я не робив.

Подібний код працював і раніше для мене.

Я розглядав ці питання:

Як "почистити шифер"?

Matplotlib pyplot show () не працює після закриття

(python) matplotlib pyplot show () .. блокування чи ні?

і намагався використовувати plt.show(), plt.clf()і plt.closeбезрезультатно.

Будь-які ідеї?

Відповіді:


113

Я волів би використовувати plt.clf()після кожного, plt.show()щоб просто очистити поточну цифру, замість того, щоб закривати та знову відкривати її, зберігаючи розмір вікна та забезпечуючи кращу продуктивність та набагато краще використання пам'яті.

Подібним чином ви могли б plt.cla() просто очистити поточні осі .

Щоб очистити конкретні осі , корисно, коли у вас є кілька осей в межах однієї фігури, ви можете зробити, наприклад:

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

axes[0, 1].clear()

47

Я виявив, що така поведінка виникає лише після запуску певного сценарію, подібного до запитаного. Я не уявляю, чому це відбувається.

Це працює (оновлює графіки), якщо я ставлю

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

після кожного plt.show()

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.