这将在GUI中显示图形:

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

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


当前回答

您可以执行以下任一操作:

plt.show(hold=False)
plt.savefig('name.pdf')

记住在关闭GUI绘图之前让savefig完成。这样您可以提前看到图像。

或者,您可以使用plt.show()查看它然后关闭GUI并再次运行脚本,但这次将plt.show()替换为plt.savefig()。

或者,您可以使用

fig, ax = plt.figure(nrows=1, ncols=1)
plt.plot(...)
plt.show()
fig.savefig('out.pdf')

其他回答

使用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();否则,文件图像将为空。

解决方案是:

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

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

考虑到今天(提出这个问题时还不可用)许多人使用Jupyter Notebook作为python控制台,有一种极其简单的方法可以将绘图保存为.png,只需从Jupyter记事本调用matplotlib的pylab类,绘制图形“内联”Jupyter单元格,然后将该图形/图像拖到本地目录。别忘了%matplotlib在第一行中内联!

解决方案:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.style.use('ggplot')
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
plt.figure()
ts.plot()
plt.savefig("foo.png", bbox_inches='tight')

如果您想显示图像并保存图像,请使用:

%matplotlib inline

之后导入matplotlib