Respostas:
Todos eles fazem coisas diferentes, pois o matplotlib usa uma ordem hierárquica na qual uma janela de figura contém uma figura que pode consistir em muitos eixos. Além disso, existem funções da interface pyplot e existem métodos na Figure
classe. Vou discutir os dois casos abaixo.
pyplot
é um módulo que coleta algumas funções que permitem que o matplotlib seja usado de maneira funcional. Presumo aqui que pyplot
tenha sido importado como import matplotlib.pyplot as plt
. Nesse caso, existem três comandos diferentes que removem coisas:
plt.cla()
limpa os eixos , ou seja, os eixos atualmente ativos na figura atual. Deixa os outros eixos intocados.
plt.clf()
limpa a figura atual inteira com todos os seus eixos, mas deixa a janela aberta, para que possa ser reutilizada em outras parcelas.
plt.close()
fecha uma janela , que será a janela atual, se não for especificado de outra forma.
Quais funções melhor se adequam a você dependem, portanto, do seu caso de uso.
Além close()
disso, a função permite especificar qual janela deve ser fechada. O argumento pode ser um número ou nome dado a uma janela quando foi criada usando figure(number_or_name)
ou pode ser uma instância de figura fig
obtida, ou seja, usando fig = figure()
. Se nenhum argumento for fornecido close()
, a janela atualmente ativa será fechada. Além disso, existe a sintaxe close('all')
, que fecha todas as figuras.
Além disso, a Figure
classe fornece métodos para limpar números. Assumirei a seguir que fig
é uma instância de um Figure
:
fig.clf()
limpa a figura inteira . Essa chamada é equivalente plt.clf()
apenas se fig
for o valor atual.
fig.clear()
é sinônimo de fig.clf()
Observe que even del fig
não fecha a janela da figura associada. Tanto quanto sei, a única maneira de fechar uma janela de figura é usando plt.close(fig)
como descrito acima.
clear()
, eu não vi muita diferença cla()
apenas com o fato de que apenas nos eixos parasitas cla()
são tratados especialmente.
clear()
função no meu matplotlib.pyplot
(Versão 1.4.2 no MacOS). Você poderia me direcionar para a documentação associada?
clear()
método. O Figure.clear
equivalente a clf
e Axes.clear
é equivalente a cla
.
Há apenas uma ressalva que eu descobri hoje. Se você tem uma função que está chamando uma plotagem muitas vezes, é melhor usar, em plt.close(fig)
vez de, de fig.clf()
alguma forma, a primeira não se acumular na memória. Em resumo, se a memória é uma preocupação, use plt.close (fig.) (Embora pareça que existem maneiras melhores, vá para o final deste comentário para obter links relevantes).
Portanto, o seguinte script produzirá uma lista vazia:
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
Considerando que este irá produzir uma lista com cinco figuras.
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
Na documentação acima, não está claro qual é a diferença entre fechar uma figura e fechar uma janela. Talvez isso esclareça.
Se você quiser tentar um script completo, você tem:
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())
Se a memória é uma preocupação, alguém já postou uma solução alternativa no SO, consulte: Crie uma figura com referência contada
pyplot
API padrão .
plt.cla () significa eixo de corrente clara
plt.clf () significa um valor atual claro
além disso, há plt.gca () (obtém o eixo atual) e plt.gcf () (obtém o valor atual)
Leia mais aqui: Matplotlib, Pyplot, Pylab, etc: Qual é a diferença entre estes e quando usar cada um?
close()
ser um comando não específico, procurei uma maneira de especificar o fechamento da figura (fig.close()
não é uma função). A sintaxe correta é:plt.close(fig)
.