在不显示 ipython 的情况下调用 pylab.savefig

我需要在文件中创建一个图形,而不需要在 IPython 笔记本中显示它。在这方面,我不清楚 IPythonmatplotlib.pylab之间的相互作用。但是,当我调用 pylab.savefig("test.png")时,除了在 test.png中保存外,还会显示当前的数字。当自动创建一大组绘图文件时,这通常是不可取的。或者在需要由另一个应用程序进行外部处理的中间文件的情况下。

不确定这是一个 matplotlibIPython笔记本问题。

162911 次浏览

这是一个 matplotlib 问题,你可以通过使用一个不显示给用户的后端来解决这个问题,例如‘ Agg’:

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt


plt.plot([1,2,3])
plt.savefig('/tmp/test.png')

编辑: 如果你不想失去显示情节的能力,关闭 互动模式,只有当你准备好显示情节时才调用 plt.show():

import matplotlib.pyplot as plt


# Turn interactive plotting off
plt.ioff()


# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('/tmp/test0.png')
plt.close(fig)


# Create a new figure, plot into it, then don't close it so it does get displayed
plt.figure()
plt.plot([1,3,2])
plt.savefig('/tmp/test1.png')


# Display all "open" (non-closed) figures
plt.show()

我们不需要 plt.ioff()plt.show()(如果我们使用 %matplotlib inline)。您可以在不使用 plt.ioff()的情况下测试以上代码。plt.close()具有必不可少的作用。试试这个:

%matplotlib inline
import pylab as plt


# It doesn't matter you add line below. You can even replace it by 'plt.ion()', but you will see no changes.
## plt.ioff()


# Create a new figure, plot into it, then close it so it never gets displayed
fig = plt.figure()
plt.plot([1,2,3])
plt.savefig('test0.png')
plt.close(fig)


# Create a new figure, plot into it, then don't close it so it does get displayed
fig2 = plt.figure()
plt.plot([1,3,2])
plt.savefig('test1.png')

如果您在 iPython 中运行此代码,它将显示第二个绘图,如果您将 plt.close(fig2)添加到该绘图的末尾,则不会看到任何内容。

总之,如果用 plt.close(fig)关闭图形,则不会显示