Відповіді:
Всі вони роблять різні речі, оскільки 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). Не могли б ви направити мене до відповідної документації?
Є лише застереження, яке я відкрив сьогодні. Якщо у вас є функція, яка викликає сюжет багато разів, вам краще використовувати plt.close(fig)
замість того, щоб fig.clf()
якось перший не накопичувався в пам'яті. Якщо коротко, якщо пам'ять викликає занепокоєння, використовуйте plt.close (fig) (хоча здається, що є кращі способи, перейдіть до кінця цього коментаря за відповідними посиланнями).
Отже, наступний сценарій створить порожній список:
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)
.