Создайте цифру, подсчитанную по ссылке

Кажется, что стандартный способ создания фигуры в matplotlib не ведет себя так, как я ожидал бы в python: по умолчанию вызов fig = matplotlib.figure() в цикле будет удерживаться на всех созданных фигурах и в конечном итоге заканчиваться Память.

a href= "< a 1 > " > a несколько, которые касаются обходных путей, но требующие явных вызовов matplotlib.pyplot.close(fig) кажутся немного хакерскими. Я бы хотел, чтобы простой способ сделать ссылку fig подсчитана, поэтому мне не придется беспокоиться о утечке памяти. Есть ли способ сделать это?

Ответ 1

Если вы создаете фигуру без использования plt.figure, тогда она должна быть подсчитана по мере того, как вы ожидаете. Например (это также использует неинтерактивный сервер Agg).

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)

Ответ 2

Если вы собираетесь копировать цифры, а не показывать их, вы можете использовать:

def savefig(*args, **kwargs):
    plt.savefig(*args, **kwargs)
    plt.close(plt.gcf())

Это, возможно, не менее хаки, но что угодно.