这将在GUI中显示图形:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
但我如何将图形保存到文件(例如foo.png)中?
这将在GUI中显示图形:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [1, 4, 9])
plt.show()
但我如何将图形保存到文件(例如foo.png)中?
当前回答
您可以使用任何扩展名(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”是您希望保存数字的名称。希望它有帮助:)
其他回答
使用matplotlib.pyplot时,必须先保存绘图,然后使用以下两行关闭绘图:
fig.savefig('plot.png') # save the plot, place the path you want to save the figure in quotation
plt.close(fig) # close the figure window
解决方案是:
pylab.savefig('foo.png')
如前所述,您可以使用:
import matplotlib.pyplot as plt
plt.savefig("myfig.png")
用于保存您正在显示的任何IPhython图像。或者换个角度(从不同的角度看),如果你曾经使用过open cv,或者你已经导入了open cv的话,你可以去:
import cv2
cv2.imwrite("myfig.png",image)
但这只是为了以防万一,如果您需要使用OpenCV。否则plt.savefig()就足够了。
只是一个额外的注释,因为我还不能评论帖子。
如果您使用的是plt.savefig('myfig')或类似行,请确保在保存图像后添加plt.clf()。这是因为savefig不会关闭绘图,如果在没有plt.clf()的情况下添加到绘图,则会添加到上一个绘图。
你可能不会注意到你的情节是否与之前的情节相似,但如果你在循环中保存你的数字,情节将慢慢变得庞大,并使你的脚本变得非常缓慢。
刚刚在MatPlotLib文档中找到了解决此问题的链接:http://matplotlib.org/faq/howto_faq.html#generate-图像-无窗口外观
他们说,防止弹出图形的最简单方法是通过matplotib.use(<backend>)使用非交互式后端(例如Agg),例如:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('myfig')
我个人还是更喜欢使用plt.close(图),因为这样你就可以选择隐藏某些数字(在循环期间),但仍然可以显示循环后数据处理的数字。它可能比选择非交互式后端要慢——如果有人测试了它,那会很有趣。
UPDATE:对于Spyder,通常不能以这种方式设置后端(因为Spyder通常会提前加载matplotlib,从而阻止您使用matplotlib.use())。
相反,请使用plt.switch_backend('Agg'),或在Spyder prefs中关闭“enable support”,然后自己运行matplotlib.use('Agg')命令。
从这两个提示中:一、二