Answers:
这是一个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()
close()
and show()
命令的问题,该问题应该可以解决您的问题。如您所知,不支持即时更改后端。
plt.plot()
如果在交互式模式下打开,则在命令行中会立即绘制ipython图形。关闭交互模式会将所有绘图的显示延迟到plt.show()
。由于您使用的是ipython笔记本,因此对交互模式的处理有所不同。
matplotlib.use('Agg')
仅此而已。我并不需要任何plt.show()
或plt.ioff()
所有在我的代码。
我们不需要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)
,则不会显示。
plt.ioff
我得到RuntimeWarning: More than 20 figures have been opened...
。plt.close
解决了。
ioff