Ответы:
Все они делают разные вещи, так как matplotlib использует иерархический порядок, в котором окно рисунка содержит фигуру, которая может состоять из множества осей. Кроме того, есть функции из интерфейса pyplot и есть методы для Figure
класса. Я буду обсуждать оба случая ниже.
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
класс предоставляет методы для очистки фигур. Я предполагаю в следующем, что fig
это экземпляр Figure
:
fig.clf()
очищает всю фигуру . Этот вызов эквивалентен plt.clf()
только если fig
это текущая цифра.
fig.clear()
это синоним fig.clf()
Обратите внимание, что даже del fig
не закроет связанное окно рисунка. Насколько я знаю, единственный способ закрыть окно рисунка - это использовать plt.close(fig)
как описано выше.
clear()
, я не видел большой разницы cla()
только с тем, что в осях паразитов только cla()
лечится специально.
clear()
моей функции нет matplotlib.pyplot
(Версия 1.4.2 на MacOS). Не могли бы вы направить меня к соответствующей документации?
clear()
метод. Figure.clear
Эквивалент clf
и Axes.clear
эквивалентен cla
.
Есть только одна оговорка, которую я обнаружил сегодня. Если у вас есть функция, вызывающая график много раз, лучше использовать ее, 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, см. Создание фигуры с подсчетом ссылок.
pyplot
API.
plt.cla () означает очистить текущую ось
plt.clf () означает очистить текущий рисунок
также есть plt.gca () (получить текущую ось) и plt.gcf () (получить текущую фигуру)
Подробнее читайте здесь: Matplotlib, Pyplot, Pylab и т. Д. Какая разница между ними и когда их использовать?
close()
это неспецифическая команда, я искал способ указать закрытие фигуры (fig.close()
это не функция). Правильный синтаксис:plt.close(fig)
.