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