此页面讨论了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标签。
答案 0 :(得分:0)
移动ion()
以便在show()
完成我认为你想要的之后。为什么它不在更高的位置,我不知道。
答案 1 :(得分:0)
如果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的解决方案)仍然很好。
答案 2 :(得分:0)
以下是适用于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()