译(三十七)-Matplotlib保存为图片
如有翻译问题欢迎评论指出,谢谢。
代码段的空白行不显示,所以加个注释符。
Matplotlib 保存为图片
Homunculus Reticulli asked:
我正在写一个简单的脚本来生成 plot,最开始的代码如下(来自 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
我不想显示 plot,简单的把 plot 保存成文件就行了(像 foo.png 这种),方便在如批处理脚本等地方使用。怎么实现这个需求?
Answers:
Hooked - vote: 1812
虽然已经有其它回答了,不过我这里还有一些关于
matplotlib.pyplot.savefig
有用的提示。文件格式可以由后缀指定:from matplotlib import pyplot as plt # plt.savefig('foo.png') plt.savefig('foo.pdf')
这将分别使输出栅格化与矢量化,都很有用。此外,对于多余的图片空白部分,可以这样移除:
plt.savefig('foo.png', bbox_inches='tight')
注意在显示 plot 时,
plt.show()
要在plt.savefig()
后面,不然图片会变成空白。Demis - vote: 254
正如其它回答所述,
plt.savefig()
或者fig1.savefig()
是有效保存图片的方式。不过我发现在一些特定情况下 figure 总是会显示(例如 Spyder 的
plt.ion()
: interactive mode = On)。为此我在循环中使用plt.close(figure_object)
来强制关闭 figure 绘制窗(见文档),防止一次循环出现一堆的 figure 窗。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()
的话,应该需要重开 figure(不过我没试过)。Lukasz Czerwinski - vote: 172
解决:
pylab.savefig('foo.png')
Save plot to image file instead of displaying it using Matplotlib
Homunculus Reticulli asked:
I am writing a quick-and-dirty script to generate plots on the fly. I am using the code below (from Matplotlib documentation) as a starting point:
我正在写一个简单的脚本来生成 plot,最开始的代码如下(来自 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
I don\'t want to display the plot on a GUI, instead, I want to save the plot to a file (say foo.png), so that, for example, it can be used in batch scripts. How do I do that?
我不想显示 plot,简单的把 plot 保存成文件就行了(像 foo.png 这种),方便在如批处理脚本等地方使用。怎么实现这个需求?
Answers:
Hooked - vote: 1812
While the question has been answered, I\'d like to add some useful tips when using
matplotlib.pyplot.savefig
. The file format can be specified by the extension:
虽然已经有其它回答了,不过我这里还有一些关于matplotlib.pyplot.savefig
有用的提示。文件格式可以由后缀指定:from matplotlib import pyplot as plt # plt.savefig('foo.png') plt.savefig('foo.pdf')
Will give a rasterized or vectorized output respectively, both which could be useful. In addition, there\'s often an undesirable, whitespace around the image, which can be removed with:
这将分别使输出栅格化与矢量化,都很有用。此外,对于多余的图片空白部分,可以这样移除:plt.savefig('foo.png', bbox_inches='tight')
Note that if showing the plot,
plt.show()
should followplt.savefig()
, otherwise the file image will be blank.
注意在显示 plot 时,plt.show()
要在plt.savefig()
后面,不然图片会变成空白。Demis - vote: 254
As others have said,
plt.savefig()
orfig1.savefig()
is indeed the way to save an image.
正如其它回答所述,plt.savefig()
或者fig1.savefig()
是有效保存图片的方式。However I\'ve found that in certain cases the figure is always shown. (eg. with Spyder having
plt.ion()
: interactive mode = On.) I work around this by forcing the closing of the figure window in my giant loop withplt.close(figure_object)
(see documentation), so I don\'t have a million open figures during the loop:
不过我发现在一些特定情况下 figure 总是会显示(例如 Spyder 的plt.ion()
: interactive mode = On)。为此我在循环中使用plt.close(figure_object)
来强制关闭 figure 绘制窗(见文档),防止一次循环出现一堆的 figure 窗。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
You should be able to re-open the figure later if needed to with
fig.show()
(didn\'t test myself).
如果需要用fig.show()
的话,应该需要重开 figure(不过我没试过)。Lukasz Czerwinski - vote: 172
The solution is:
解决:pylab.savefig('foo.png')
共有 0 条评论