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

tnt*_*tnt 82 matplotlib ipython-notebook

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

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

sta*_*oat 140

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

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

plt.plot([1,2,3])
plt.savefig('/tmp/test.png')
Run Code Online (Sandbox Code Playgroud)

编辑:如果您不想失去显示绘图的功能,请关闭交互模式,并仅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()
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供的出色反馈.似乎plt.close(图)是我需要的关键命令.我仍然不清楚ioff,因为它似乎不影响操作; 但是,我可能错过了一些东西.再次感谢. (3认同)
  • 好的 - 但是,我想在iPython中保留内联绘图.如果在后端进行完整切换,您的建议可以正常工作.问题是如何在保存数字的特殊情况下(不显示内联)允许内联绘图的一般情况.根据您的建议,我尝试重新加载模块并暂时更改后端,但没有成功.有关如何在iPython笔记本会话中临时更改后端的任何想法? (2认同)
  • 我给出的食谱是通用的;如果您不在 ipython 笔记本中工作, plt.ioff() 对于阻止数字在屏幕上和屏幕上闪烁非常重要,就像在命令行中,一旦您调用 `plt.plot()` ,就会绘制 ipython 数字,如果交互模式已开启。关闭交互模式会延迟所有绘图的显示,直到“plt.show()”。由于您使用的是 ipython 笔记本,因此交互模式的处理方式有所不同。 (2认同)

Moj*_*adi 50

我们不需要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')
Run Code Online (Sandbox Code Playgroud)

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

总之,如果你关闭数字plt.close(fig),它将不会显示.

  • 更好的解决方案! (2认同)
  • 更好的解决方案!我在循环中生成并保存了许多绘图.用'plt.ioff`我得到'运行时警告:已经打开了20多个数字......`.`plt.close`解决了它. (2认同)
  • **只需在每个图的末尾调用“plt.close()”而不是“plt.show()”,它们就不会显示**。这是最好的解决方案,因为它不会改变任何全局行为并且只需要一行。 (2认同)