将绘图保存到图像文件,而不是使用Matplotlib显示它

2022-09-05 00:55:56

我正在编写一个快速而肮脏的脚本,以动态生成情节。我使用以下代码(来自Matplotlib文档)作为起点:

from pylab import figure, axes, pie, title, show

# Make a square figure and axes
figure(1, figsize=(6, 6))
ax = axes([0.1, 0.1, 0.8, 0.8])

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]

explode = (0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor': '0.8', 'pad': 5})

show()  # Actually, don't show, just save to foo.png

我不想在GUI上显示绘图,而是希望将绘图保存到文件(例如foo.png),以便例如可以在批处理脚本中使用。我该怎么做?


答案 1

使用 matplotlib.pyplot.savefig 时,文件格式可以通过扩展名指定:

from matplotlib import pyplot as plt

plt.savefig('foo.png')
plt.savefig('foo.pdf')

这将分别提供栅格化或矢量化输出。此外,图像周围有时会出现不需要的空格,可以使用以下命令将其删除:

plt.savefig('foo.png', bbox_inches='tight')

请注意,如果显示情节,应遵循 ;否则,文件图像将为空白。plt.show()plt.savefig()


答案 2

正如其他人所说,或者确实是保存图像的方法。plt.savefig()fig1.savefig()

但是,我发现在某些情况下,该数字始终显示。(例如,Spyder具有:交互模式= On。我通过强制关闭我的巨型循环中的图形窗口来解决这个问题(参见文档),因此在循环期间我没有一百万个打开的数字:plt.ion()plt.close(figure_object)

import matplotlib.pyplot as plt
fig, ax = plt.subplots( nrows=1, ncols=1 )  # create figure & 1 axis
ax.plot([0,1,2], [10,20,3])
fig.savefig('path/to/save/image/to.png')   # save the figure to file
plt.close(fig)    # close the figure window

如果需要,您应该能够在以后重新打开该图(没有测试我自己)。fig.show()