在ipython中调用pylab.savefig而不显示

时间:2013-03-30 00:00:11

标签: matplotlib ipython-notebook

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

不确定这是matplotlib还是IPython笔记本问题。

2 个答案:

答案 0 :(得分:125)

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

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

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

编辑:如果您不想丢失显示图表的功能,请关闭Interactive Mode,并在准备好显示图表时仅调用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()

答案 1 :(得分:42)

我们不需要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)关闭数字,则不会显示。