有很多关于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
任何帮助,即使它只是“查找this_method”也会非常好,所以我至少可以缩小我的努力来弄清楚如何使用这种方法。如果有更多有用的信息,请告诉我。
答案 0 :(得分:10)
from pylab import *
import time
ion()
tstart = time.time() # for profiling
x = arange(0,2*pi,0.01) # x-array
line, = plot(x,sin(x))
for i in arange(1,200):
line.set_ydata(sin(x+i/10.0)) # update the data
draw() # redraw the canvas
pause(0.01)
print 'FPS:' , 200/(time.time()-tstart)
ioff()
show()
#
以上对我很有帮助。我在win7操作系统下的pythonxy2.7.3中的spyder编辑器中运行它。 请注意draw()后面的pause()语句,然后是ioff()和show()。
答案 1 :(得分:9)
您链接的问题的第二个答案提供了答案:在draw()
之后致电plot()
以使其立即显示;例如:
import time
ion()
x = linspace(-1,1,51)
plot(sin(x))
for i in range(10):
plot([sin(i+j) for j in x])
# make it appear immediately
draw()
time.sleep(1)
如果这不起作用...请尝试在此页面上执行的操作:http://www.scipy.org/Cookbook/Matplotlib/Animations
import time
ion()
tstart = time.time() # for profiling
x = arange(0,2*pi,0.01) # x-array
line, = plot(x,sin(x))
for i in arange(1,200):
line.set_ydata(sin(x+i/10.0)) # update the data
draw() # redraw the canvas
print 'FPS:' , 200/(time.time()-tstart)
该页面提到line.set_ydata()
功能是关键部分。
答案 2 :(得分:5)
在我的mac上运行ipython时遇到了完全相同的问题。 (在Macbook pro上运行雪豹的蟒蛇2.7 32位的Enthought分布)。
得到朋友的工作提示。使用以下参数从终端运行ipython:
“ipython -wthread -pylab”
这对我有用。来自“Daniel G”的上述python代码没有发生任何事故,而之前它没有更新情节。
根据ipython文档:“ - -gthread,-qthread,-q4thread,-wthread,-pylab:...]它们为GTK,Qt(版本3和4)和WXPython工具包提供了线程支持,并且对于matplotlib库。“ 我不知道为什么这很重要,但它确实有效。
希望有帮助, labjunky
答案 3 :(得分:0)
请参阅此处发布的answer类似问题。只使用 GTKAgg 后端,我可以毫无问题地生成动画。为此,您需要将此行添加到脚本中(我想在导入pylab之前):
matplotlib.use('GTkAgg')
并安装PyGTK。