这将在GUI中显示图形:

import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()

但我如何将图形保存到文件(例如foo.png)中?


当前回答

其他答案是正确的。然而,我有时发现我想稍后打开地物对象。例如,我可能希望更改标签大小、添加网格或执行其他处理。在一个完美的世界里,我只需重新运行生成情节的代码,并调整设置。唉,世界并不完美。因此,除了保存为PDF或PNG外,我还添加了:

with open('some_file.pkl', "wb") as fp:
    pickle.dump(fig, fp, protocol=4)

像这样,我可以稍后加载地物对象并根据需要操作设置。

我还为堆栈中的每个函数/方法编写了带有源代码和locals()字典的堆栈,以便稍后可以确切地知道是什么生成了该图。

注意:要小心,因为有时这种方法会生成巨大的文件。

其他回答

如果您不喜欢“当前”数字的概念,请执行以下操作:

import matplotlib.image as mpimg

img = mpimg.imread("src.png")
mpimg.imsave("out.png", img)

除上述内容外,我还为名称添加了__file__,以便图片和Python文件获得相同的名称。我还添加了一些参数以使它看起来更好:

# Saves a PNG file of the current graph to the folder and updates it every time
# (nameOfimage, dpi=(sizeOfimage),Keeps_Labels_From_Disappearing)
plt.savefig(__file__+".png",dpi=(250), bbox_inches='tight')
# Hard coded name: './test.png'

如果像我一样使用Spyder IDE,则必须禁用交互模式:

plt.ioff()

(此命令在科学启动时自动启动)

如果要再次启用,请使用:

plt.ion()

您可以使用任何扩展名(png、jpg等)和所需的分辨率保存图像。这里有一个功能来保存您的身材。

import os

def save_fig(fig_id, tight_layout=True, fig_extension="png", resolution=300):
    path = os.path.join(IMAGES_PATH, fig_id + "." + fig_extension)
    print("Saving figure", fig_id)
    if tight_layout:
        plt.tight_layout()
    plt.savefig(path, format=fig_extension, dpi=resolution)

“fig_id”是您希望保存数字的名称。希望它有帮助:)

import matplotlib.pyplot as plt
plt.savefig("image.png")

在Jupyter Notebook中,您必须在一个单元格中删除plt.show()并添加plt.savefig()以及其他plt代码。图像仍将显示在笔记本中。