2014-06-30 24 views
9

我正在使用Matplotlib和MPLD3来创建可以在html plages中显示的图形(使用django)。目前,我的图形是从csv文件中提取的数据动态生成的。我经常在终端上看到这条消息:关闭Matplotlib数字

RuntimeWarning:超过20个数字已打开。通过pyplot接口创建的数字(matplotlib.pyplot.figure)会一直保留,直到显式关闭并可能消耗太多内存。 (要控制此警告,请参阅rcParam figure.max_num_figures)。 max_open_warning,RuntimeWarning)

我真的不知道这意味着什么,但我假设这意味着我应该关闭那些不使用图形的一些方法。无论如何这样做还是我完全脱离基地?谢谢。

+8

不知道这是最好的副本。简单的答案是你应该清理完你的情节后:'plt.close(fig)'或'plt.close('all')'。 – tacaswell

+1

@tcaswell为什么不加这个作为答案? – Korem

回答

2

如果您不通过pyplot接口创建它们,数字将自动关闭(通过垃圾回收)。例如,您可以使用创建的数字:

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
from matplotlib.figure import Figure 


def new_fig(): 
    """Create a new matplotlib figure containing one axis""" 
    fig = Figure() 
    FigureCanvas(fig) 
    ax = fig.add_subplot(111) 

    return fig, ax 

(基于this answer

7

我更喜欢在评论tacaswell答案,但不得不寻找它。

清理你的阴谋,你与他们做后:

plt.close(fig)

plt.close('all')

+3

奇怪,我想知道为什么没有这个图的'close()'方法。 –