[英]How to prevent ipython shutting down interactive mode while running a script
本页讨论了ipython在交互式绘图中的用法: http ://matplotlib.org/users/shell.html
根据该页面,默认情况下,用于在ipython中运行脚本的%run命令关闭交互模式。 是否可以在交互模式下运行脚本?
我希望脚本中的绘图命令在运行时立即在绘图图中生效,就好像它们是从控制台以交互方式输入的一样。
例如,考虑以下非常简单的脚本:
# try.py:
# run in ipython that is started with
# ipython --pylab
# using
# %run -i try.py
from numpy import *
from time import sleep
ion()
x = randn(10000)
hist(x,100)
show()
sleep(5)
xlabel('labalu')
如注释所示从ipython运行时,此脚本等待5秒,然后显示所有内容。 我想要的是:如注释中所示从ipython运行时,脚本应立即显示直方图,等待5秒钟,然后更新图形以显示x标签。
移动ion()
以便在show()
执行我认为想要的操作。 为什么它不在更高的位置,我不知道是副手。
如果将wx用作后端,则可以进行以下工作:
#run in ipython that is started with ipython --pylab=wx
from numpy import *
import matplotlib
matplotlib.use('WX')
import wx
from time import sleep
import numpy as np
import matplotlib.pyplot as plt
plt.ion()
x = np.random.uniform(0,1,100)
plt.plot(x)
plt.show()
wx.Yield()
for i in reversed(range(5)):
print(i)
sleep(1)
plt.xlabel('labl')
wx.Yield()
因此, wx.Yield()
允许与图形窗口进行交互。 当脚本使用普通的python运行时,这也起作用,但是在脚本末尾自动关闭了图形。
任何跨后端解决方案(或qt / tk的解决方案)仍然很不错。
下面是可与wx和qt后端一起使用的解决方案。 gcf()。canvas.flush_events()可以解决问题。
# try.py:
# run in ipython that is started with
# ipython --pylab
# using
# %run -i try.py
from numpy import *
import matplotlib
from time import sleep
x = randn(10000)
hist(x,100)
show()
ion()
gcf().canvas.flush_events()
sleep(5)
xlabel('labalu')
show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.