matplotlib plot

matplotlib - clear plot python



¿Cuándo usar cla(), clf() o close() para borrar un gráfico en matplotlib? (3)

Matplotlib ofrece sus funciones:

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

La documentación no ofrece mucha información sobre cuál es la diferencia entre estas funciones. ¿Cuándo debo usar cada función y qué hace exactamente?


Hay una advertencia que descubrí hoy. Si tiene una función que llama a un trazado muchas veces, es mejor que use 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 los enlaces relevantes).

Así que 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 éste producirá una lista con 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())

De la documentación anterior no queda claro cuál es la diferencia entre cerrar una figura y cerrar una ventana. Tal vez eso se aclare.

Si quieres probar un script completo ahí 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 ha publicado una solución en SO, vea: Cree una figura que sea una referencia contada


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 pyplot y hay métodos en la clase Figure . Voy a discutir los dos casos a continuación.

interfaz pyplot

pyplot es un módulo que recopila un par de funciones que permiten utilizar matplotlib de manera funcional. Supongo que pyplot se ha importado import matplotlib.pyplot as plt . En este caso, hay tres comandos diferentes que eliminan cosas:

plt.cla() borra un eje , 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 se puede reutilizar para otras parcelas.

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 función close() además permite que se especifique qué ventana se debe cerrar. 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 figura de fig obtenida, es decir, usando fig = figure() . Si no se da ningún argumento para close() , la ventana activa en ese momento se cerrará. Además, existe la sintaxis close(''all'') , que cierra todas las cifras.

Métodos de la clase de figura.

Además, la clase Figure proporciona métodos para borrar figuras. Asumiré en lo siguiente que el fig es un ejemplo de una Figure :

fig.clf() borra toda la figura . Esta llamada es equivalente a plt.clf() solo si la figura actual es la figura.

fig.clear() es un sinónimo de fig.clf()

Tenga en cuenta que incluso del fig no cerrará la ventana de figura asociada. Por lo que sé, la única forma de cerrar una ventana de figura es usar plt.close(fig) como se describe anteriormente.