From: Brian B. <bb...@br...> - 2010-09-21 01:14:35
|
On Sep 20, 2010, at 7:43 PM, Benjamin Root wrote: > On Mon, Sep 20, 2010 at 5:12 PM, Brian Blais <bb...@br...> wrote: > I am trying to do some simple calculations in a loop, and draw a plot periodically within the loop, and the drawing is not updating. I'm using the Enthought Python Distribution which is using Matplotlib 0.99.3 with python 2.6.5 on Snow Leopard, OSX 10.6.4, and am running it in ipython with the -pylab flag (and I've tried with the -wthread flag too). A sample piece of code below. It is actually drawing, because when I control-C to stop, it shows the plot. > > from pylab import * > from numpy import * > import sys > > def dot(): > sys.stdout.write('.') > sys.stdout.flush() > > def busy_loop(): > > for i in range(1000): > r=rand(100,100) > > return r > > for t in range(1000): > > r=busy_loop() > > clf() > imshow(r,interpolation='nearest',cmap=cm.gray) > draw() > show() > > dot() > > First, I would suggest using time.sleep() to do your busy loop: > > >>> import time > >>> time.sleep(0.1) > I tried that before (even upping to 1 second)...no dice. > > Second, you have the show() function within the loop. Call the show() function only once (in interactive mode), and draw() can be used to update the graph. also done...no effect. > Also note that some plotting functions return objects that have a function like "update_data" that would allow you to modify the plot without having to call clf(). sure, but that take more effort, and I don't really care about a slow down, because most of my time is spent in the busy loop. I do care about it displaying *at all*, which is the problem. I am familiar with the efficient way of animating, but for most things I want to focus on the computation and then display here and there, so I want the shortest, clearest plotting code without any optimizations. if I call plot commands, and then a draw, I expect it to actually pause right there until it is done drawing, and then continue...it's not doing that. another wrinkle: If I run ipython -pylab, and then run my script like: run do_my_script I get no plot showing (an empty figure window shows, with a busy process "rainbow spiral). Now, I control-C and the plots come up and my script stops. I then type again: run do_my_script it works! once the figure is drawn once, it seems to work just fine. the *first* time it doesn't display, and requires a control-C. weird! can anyone reproduce this? bb -- Brian Blais bb...@br... http://web.bryant.edu/~bblais http://bblais.blogspot.com/ |