malloc free en python
Crea una figura que sea referencia contada. (2)
Si crea la figura sin usar plt.figure
, entonces debe ser una referencia contada como espera. Por ejemplo (esto también está utilizando el backend Agg no interactivo).
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
# The pylab figure manager will be bypassed in this instance.
# This means that `fig` will be garbage collected as you''d expect.
fig = Figure()
canvas = FigureCanvas(fig)
ax = fig.add_subplot(111)
Parece que la forma estándar de crear una figura en matplotlib no se comporta como esperaría en python: de forma predeterminada, al llamar a fig = matplotlib.figure()
en un bucle se mantendrán todas las figuras creadas, y finalmente se fig = matplotlib.figure()
de la memoria.
Hay quite publicaciones que tratan sobre soluciones alternativas, pero requerir llamadas explícitas a matplotlib.pyplot.close(fig)
parece un poco pirateado. Lo que me gustaría es una forma sencilla de hacer que fig
referencias a las fig
contadas, para no tener que preocuparme por las pérdidas de memoria. Hay alguna manera de hacer esto?
Si solo va a guardar figuras en lugar de mostrarlas, puede usar:
def savefig(*args, **kwargs):
plt.savefig(*args, **kwargs)
plt.close(plt.gcf())
Esto podría decirse que no es menos hacky, pero lo que sea.