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.