有很多关于matplotlib,pylab,pyplot,ipython的问题,所以如果你厌倦了被问到这个问题,我很抱歉。我会尽量具体,因为我一直在研究人们的问题,查看pyplot和pylab的文档,我仍然不确定自己做错了什么。使用代码:
目标:每隔0.5秒绘制一个图形,调用plot命令后立即更新该图形。
我的编码尝试如下(运行在ipython-pylab上):
import time
ion()
x=linspace(-1,1,51)
plot(sin(x))
for i in range(10):
plot([sin(i+j) for j in x])
#see **
print i
time.sleep(1)
print 'Done'
它正确地绘制了每一行,但直到它退出for循环。我试过把draw()
放在**
所在的位置来强制重画,但这似乎也不起作用。理想情况下,我希望它只是添加每一行,而不是做一个完整的重画。不过,如果需要重新绘制,也可以。
解决问题的其他尝试:
就在ion()
之后,尝试添加hold(True)
但没有效果。
对于尝试的踢腿,show()
对于**
我找到的最接近我要做的事情的答案是在plotting lines without blocking execution,但是show()
什么也没做。
如果这是一个直截了当的请求,我很抱歉,而且我正在回顾一些如此明显的事情。值得一提的是,这是在我试图将matlab代码从类转换为一些python以供自己使用时出现的。我试图转换的原始matlab(已删除初始化)如下:
for i=1:time
plot(u)
hold on
pause(.01)
for j=2:n-1
v(j)=u(j)-2*u(j-1)
end
v(1)= pi
u=v
end
任何帮助,即使只是“查找这个方法”都是很好的,所以我至少可以缩小我的努力范围,找出如何使用这个方法。如果还有什么有用的信息,请告诉我。
您链接的问题的第二个答案提供了答案:在每个
plot()
之后调用draw()
,使其立即出现;例如:如果那不起作用。。。试试他们在这页上的做法:http://www.scipy.org/Cookbook/Matplotlib/Animations
该页提到,
line.set_ydata()
函数是关键部分。以上这些对我很有用。我在win7 OS下的pythonx2.7.3的spyder编辑器中运行了它。 注意在draw()后面跟着ioff()和show()的pause()语句。
在我的mac上运行ipython也有同样的问题。(MacBookPro上运行SnowLeopard的Python2.732bit的热情发行版)。
从一个工作上的朋友那里得到了小费。使用以下参数从终端运行ipython:
“ipython-wthread-pylab”
这对我有用。上面来自“Daniel G”的python代码运行时没有意外,而之前它没有更新绘图。
根据ipython文档:“[-gthread,-qthread,-q4thread,-wthread,-pylab:…]它们为GTK、Qt(版本3和版本4)和WXPython工具包以及matplotlib库提供线程支持。” 我不知道为什么这很重要,但它起作用了。
希望对你有帮助, 拉布朱基
相关问题 更多 >
编程相关推荐