On Mon, Nov 2, 2009 at 10:52 PM, David Sanders <dpsand...@gmail.com> wrote:
> from pylab import *
>
> ion()
>
> N = 1000
> pos = zeros((N,2))
>
> figure(figsize=(8,8))
> points, = plot(pos[:,0], pos[:,1], ',')
> axis([-20,20,-20,20])
>
> for t in range(1000):
>
>     pos += uniform(-1,1,N*2).reshape(N,2)
>     points.set_data(pos[:,0].copy(), pos[:,1].copy())
>     draw()

The Line2D object keeps the input data as a cache and only update it
(recache) if the new data is different than the cached one.
The problem in this particular case is that the cache is actually a
*pos* itself. And modifying the pos in place, actually modify the
cache in the Line2D object. Thus, set_data sees that the given data is
identical to the cached one, and skip the recaching.
I'm not sure what is the best approach here, and I defer the fix (or
not) to others.
Meanwhile, you can force the recaching with recache method. i.e., call
points.recache() after set_data. You don't need to make a copy also.
As a matter of fact, I think it will give you a best performance (but
not tested) if you directly update the cached data and do not call
set_data.
Note that in this particular case, pos == cache, so you actually don't
need to call get_data, but this is not a general case.

posx, posy = points.get_data(orig=True)

for t in range(100):
    dx, dy = uniform(-1,1,N*2).reshape(2, N) # note the change in the shape
    posx += dx
    posy += dy
    points.recache()
    draw()

Regards,

-JJ

------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to