Когда использовать cla (), clf () или close () для очистки графика в matplotlib? - PullRequest
446 голосов
/ 21 ноября 2011

Matplotlib предлагает там функции:

cla()   # Clear axis
clf()   # Clear figure
close() # Close a figure window

Документация не дает большого понимания того, в чем заключается разница между этими функциями.Когда я должен использовать каждую функцию и что именно она делает?

Ответы [ 3 ]

591 голосов
/ 22 ноября 2011

Все они делают разные вещи, так как matplotlib использует иерархический порядок, в котором окно фигуры содержит фигуру, которая может состоять из множества осей.Кроме того, есть функции из интерфейса pyplot и методы класса Figure.Я рассмотрю оба случая ниже.

интерфейс pyplot

pyplot - это модуль, который собирает несколько функций, позволяющих функционально использовать matplotlib.Здесь я предполагаю, что pyplot было импортировано как import matplotlib.pyplot as plt.В этом случае есть три разные команды, которые удаляют вещи:

plt.cla() очищает оси , то есть текущие активные оси на текущем рисунке.Остальные оси остаются нетронутыми.

plt.clf() очищает всю текущую фигуру со всеми ее осями, но оставляет окно открытым, так что его можно использовать для других графиков.

plt.close() закрывает окно , которое будет текущим окном, если не указано иное.

Какая функция подходит вам лучше всего, зависит, таким образом, от вашего варианта использования.

Кроме того, функция close() позволяет указать, какое окно должно быть закрыто.Аргументом может быть либо номер, либо имя, данное окну, когда оно было создано с использованием figure(number_or_name), или это может быть полученный экземпляр фигуры fig, то есть с использованием fig = figure().Если аргумент close() не задан, текущее активное окно будет закрыто.Кроме того, существует синтаксис close('all'), который закрывает все цифры. Методы

класса Figure

Кроме того, класс Figure предоставляет методы для очистки фигур.Далее я предполагаю, что fig является экземпляром Figure:

fig.clf() очищает всю цифру .Этот вызов эквивалентен plt.clf(), только если fig является текущей цифрой.

fig.clear() является синонимом fig.clf()

Обратите внимание, что даже del fig не закроетсвязанное окно рисунка.Насколько я знаю, единственный способ закрыть окно фигуры - это использовать plt.close(fig), как описано выше.

65 голосов
/ 26 октября 2015

Есть только одна оговорка, которую я обнаружил сегодня. Если у вас есть функция, которая часто вызывает график, вам лучше использовать plt.close(fig) вместо fig.clf(), так как первое не накапливается в памяти. Короче говоря , если память вызывает беспокойство, используйте plt.close (рис.) (хотя кажется, что есть более эффективные способы, перейдите к концу этого комментария для соответствующих ссылок).

Итак, следующий скрипт создаст пустой список:

for i in range(5):
    fig = plot_figure()
    plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())

Принимая во внимание, что этот список создаст список из пяти цифр.

for i in range(5):
    fig = plot_figure()
    fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())

Из приведенной выше документации мне не ясно, в чем разница между закрытием фигуры и закрытием окна. Может быть, это прояснит.

Если вы хотите попробовать полный скрипт, у вас есть:

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    plt.close(fig)

print(plt.get_fignums())

for i in range(5):
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.plot(x, y)
    fig.clf()

print(plt.get_fignums())

Если память является проблемой, кто-то уже опубликовал обходной путь в SO, см .: Создание фигуры, которая считается ссылкой

8 голосов
/ 23 октября 2018

plt.cla () означает очистить ось тока

plt.clf () означает сбросить текущую цифру

также есть plt.gca () (получить текущую ось) и plt.gcf () (получить текущую цифру)

Читатьподробнее здесь: Matplotlib, Pyplot, Pylab и т. д. В чем разница между ними и временем их использования?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...