|
From: Greg W. <gre...@gm...> - 2007-07-24 19:30:53
|
Nevermind. I'm an idiot. I removed the call to update_line() before p.show()
and now it works. That was cruft left over from earlier experiments
Cheers,
Greg
On 7/24/07, Greg Willden <gre...@gm...> wrote:
>
> Hello All,
> I'm looking for the most efficient way to perform 2D plot animations.
>
> I've been experimenting with the animation examples from the Matplotlib
> cookbook. More specifically I'm using a version of "Animating selected plot
> elements" that has been modified to work with wxWidgets. I want to do the
> same type of thing but with 2D plots ( i.e. imshow).
>
>
> When I try ax.draw_artist(im) where "im" is the AxesImage returned from
> the initial call to imshow I get an AssertionError for self._cachedRenderer
> is not None.
>
>
> What am I doing wrong?
> Thanks
> Greg
>
>
> Here is my hacked up version of the example.
> <code>
> # The number of blits() to make before exiting
> NBLITS = 1000
>
> import matplotlib
> matplotlib.use('WXAgg')
> matplotlib.rcParams['toolbar'] = None
>
> import wx
> import sys
> import pylab as p
> import matplotlib.numerix as nx
> import time
>
> # allow the user to disable the WXAgg accelerator from the command line
> if '--no-accel' in sys.argv:
> import matplotlib.backends.backend_wxagg
> matplotlib.backends.backend_wxagg._use_accelerator(False)
>
> ax = p.subplot(111)
> canvas = ax.figure.canvas
>
> p.subplots_adjust (left=0.3, bottom=0.3) # check for flipy bugs
> p.grid() # to ensure proper background restore
>
> # create the initial line
> appx = 10.0
> appy = 3.8
> delta = 0.125
> x = p.arange(-appx/2.0, appx/2.0, delta)
> y = p.arange(-appy/2.0, appy/2.0, delta)
> X, Y = p.meshgrid(x, y)
> # bivariate_normal(X, Y,sigmax,sigmay,mux,muy)
> Z = p.bivariate_normal(X, Y, 0.9, 0.7, 4.1, -0.15)
>
> im = p.imshow(Z,cmap=p.cm.hot)
>
> # for profiling
> tstart = time.time()
> blit_time = 0.0
>
> def update_line(*args):
> global blit_time
>
> if update_line.background is None:
> update_line.background = canvas.copy_from_bbox(ax.bbox )
>
> # restore the clean slate background
> canvas.restore_region(update_line.background)
> # update the data
> im.set_data(p.bivariate_normal(X,Y,
> 0.9,0.7,
> 4.1+p.sin(update_line.cnt/20.0),
> -0.15+p.cos(update_line.cnt/10.0)))
> # just draw the animated artist
> ax.draw_artist(im)
> # just redraw the axes rectangle
>
> t = time.time()
> canvas.blit(ax.bbox)
> blit_time += time.time() - t
>
> if update_line.cnt == NBLITS:
> # print the timing info and quit
> frame_time = time.time() - tstart
> print '%d frames: %.2f seconds' % (NBLITS, frame_time)
> print '%d blits: %.2f seconds' % (NBLITS, blit_time)
> print
> print 'FPS: %.2f' % (NBLITS/frame_time)
> if blit_time > 0:
> print 'BPS: %.2f' % (NBLITS/blit_time)
> global timer
> timer.Stop()
>
> update_line.cnt += 1
>
>
>
> update_line.cnt = 0
> update_line.background = None
> TIMER_ID=100
> panel = wx.GetApp()
> global timer
> timer = wx.Timer(panel,TIMER_ID)
> timer.Start(10)
> wx.EVT_TIMER(panel,TIMER_ID, update_line)
> update_line()
> p.show()
>
> </code>
> --
> Linux. Because rebooting is for adding hardware.
--
Linux. Because rebooting is for adding hardware.
|