plt.savefig 如何在内部处理文件处理程序问题(文件引用打开/关闭)



我正在编写代码来创建绘图并使用matplotlib中的plt.savefig方法保存它们。

我想知道这个函数如何处理文件处理问题(准确地说是关闭文件句柄),并确保当我创建大量此类绘图时这是否不会导致内存管理问题。

我尝试查找MatPlotLib的代码库和一些关于此的StackOverflow问题,但还没有找到任何东西。

我的猜测是,由于我没有创建文件处理程序,因此不存在任何要关闭的引用。然而,我想确定这个假设,并想了解后端到底发生了什么。

    data_array = np.random.normal(size=10)
    plt.boxplot(data_array)
    plt.savefig(os.path.join(path_to_file,"box_plot.png"))
    plt.close()

这取决于您实际使用哪个后端来绘制图像。从你发布的片段中,matplotlib 会猜测它应该使用 PNG 后端。这反过来又创建了一个 matplotlib.backends.backend_agg.FigureCanvasAgg 的实例。

此类执行实际保存,如下所示:

def print_raw(self, filename_or_obj, *args, **kwargs):
    FigureCanvasAgg.draw(self)
    renderer = self.get_renderer()
    with cbook._setattr_cm(renderer, dpi=self.figure.dpi), 
            cbook.open_file_cm(filename_or_obj, "wb") as fh:
        fh.write(renderer._renderer.buffer_rgba())

所以没有悬空的打开文件。保证正确关闭文件。看看源代码。

最新更新