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

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

不知道这是一个matplotlibIPython笔记本问题。

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

 import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt plt.plot([1,2,3]) plt.savefig('/tmp/test.png') 

编辑:如果你不想失去显示图的能力,请closures交互模式 ,只有在准备好显示图时才调用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()情况下testing上面的代码。 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)closuresgraphics,它将不会显示。