Respuestas:
Todos hacen cosas diferentes, ya que matplotlib usa un orden jerárquico en el que una ventana de figura contiene una figura que puede constar de muchos ejes. Además, hay funciones de la interfaz de pyplot y hay métodos en la Figure
clase. Discutiré ambos casos a continuación.
pyplot
es un módulo que recopila un par de funciones que permiten utilizar matplotlib de manera funcional. Supongo que pyplot
se ha importado como import matplotlib.pyplot as plt
. En este caso, hay tres comandos diferentes que eliminan cosas:
plt.cla()
borra los ejes , es decir, los ejes actualmente activos en la figura actual. Deja los otros ejes intactos.
plt.clf()
borra toda la figura actual con todos sus ejes, pero deja la ventana abierta, de modo que puede reutilizarse para otros trazados.
plt.close()
cierra una ventana , que será la ventana actual, si no se especifica lo contrario.
Las funciones que más le convengan dependen de su caso de uso.
La close()
función además permite especificar qué ventana debe cerrarse. El argumento puede ser un número o un nombre dado a una ventana cuando se creó usando figure(number_or_name)
o puede ser una instancia de figura fig
obtenida, es decir, usando fig = figure()
. Si no se da ningún argumento close()
, la ventana activa actualmente se cerrará. Además, existe la sintaxis close('all')
, que cierra todas las figuras.
Además, la Figure
clase proporciona métodos para borrar cifras. Asumiré a continuación que fig
es una instancia de a Figure
:
fig.clf()
borra toda la figura . Esta llamada es equivalente a plt.clf()
solo si fig
es la cifra actual.
fig.clear()
es sinónimo de fig.clf()
Tenga en cuenta que incluso del fig
no cerrará la ventana de figura asociada. Hasta donde sé, la única forma de cerrar una ventana de figura es usar plt.close(fig)
como se describe anteriormente.
clear()
No he visto mucha diferencia con cla()
solo que en los ejes de parásitos solo cla()
se trata especialmente.
clear()
función en mi matplotlib.pyplot
(Versión 1.4.2 en MacOS). ¿Podría dirigirme a la documentación asociada?
clear()
método. El Figure.clear
equivalente a clf
y Axes.clear
es equivalente a cla
.
Solo hay una advertencia que descubrí hoy. Si tiene una función que está llamando a una trama muchas veces, es mejor usarla en plt.close(fig)
lugar de fig.clf()
alguna manera, la primera no se acumula en la memoria. En resumen, si la memoria es una preocupación, use plt.close (fig) (aunque parece que hay mejores formas, vaya al final de este comentario para obtener enlaces relevantes).
Entonces el siguiente script producirá una lista vacía:
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
Mientras que este producirá una lista con cinco cifras.
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
De la documentación anterior no me queda claro cuál es la diferencia entre cerrar una figura y cerrar una ventana. Quizás eso aclare.
Si quieres probar un script completo, tienes:
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())
Si la memoria es una preocupación, alguien ya publicó una solución alternativa en SO, vea: Cree una figura que se cuente por referencia
pyplot
API estándar .
plt.cla () significa claro eje actual
plt.clf () significa una cifra actual clara
también, hay plt.gca () (obtener el eje actual) y plt.gcf () (obtener la figura actual)
Lea más aquí: Matplotlib, Pyplot, Pylab, etc.: ¿Cuál es la diferencia entre estos y cuándo usar cada uno?
close()
es un comando no específico, busqué una forma de especificar el cierre de la figura (fig.close()
no es una función). La sintaxis correcta es:plt.close(fig)
.