我有这个Python代码:
from pylab import *
from numpy import *
time=linspace(-pi,pi,10000)
ycos=cos(time)
ysin=sin(time)
plot(time,ycos)
plot(time,ysin)
show()
如果我通过Ipython终端执行所有这些步骤,我可以保持图形打开并与之交互。但是,如果我通过$python script.py
运行脚本,则数字会立即打开并关闭。
我怎样才能拥有与Ipython终端相同的行为,但是当作为脚本运行时?
答案 0 :(得分:18)
在快速查看问题之后,这是一个更明智的答案。
首先,让我们假设
from matplotlib import pylab
pylab.plot(range(10), range(10))
pylab.show()
没有“保持”情节,即在节目结束前几乎没有显示。如果发生这种情况,那么调用pylab.show()
假设您正在以交互模式运行,因此在调用此函数之后会继续执行其他进程。由于情况不是这样,Python退出,绘图显示也是如此。现在,解决这个问题的第一种方法是强制pylab.show
阻止:
pylab.show(block=True)
但是,我们不知道为什么pylab.show
假设您在交互模式下运行。要确认其假设,请尝试运行以下代码
import matplotlib
print matplotlib.is_interactive()
如果打印为True,则表示您的默认配置设置为interactive: True
。要检查哪个配置,请print matplotlib.matplotlib_fname()
找到它的路径。打开它并检查interactive
参数的值。
现在,如果您不想修改配置,我建议采用不同的解决方案:
import matplotlib
from matplotlib import pylab
if matplotlib.is_interactive():
pylab.ioff()
pylab.plot(range(10), range(10))
pylab.show()
所以matplotlib
认为在调用show
方法之前必须渲染内容的情况不存在。最后,这些解决方案中最可怕的是使用pylab.pause
或等价物:
from matplotlib import pylab
pylab.ion() # Force interactive
pylab.plot(range(10), range(10))
pylab.show() # This does not block
pylab.pause(2**31-1)