I tried on 2 computers, both with gentoo.
one 64bit with mpl 0.98.5.3 and wxwidget 2.8.10.1
another with mpl svn rev 7249 and wxwidget 2.8.10
and it 'twinkle', the lines are not drawn each frame.
I recorded a small video which I put on rapidshare (couldn't think of
anything better for now) :
http://rapidshare.com/files/253966760/anim-twinkle-mpl-wxgtk.mpeg.html
that shows the plot twinkling

it twinkles way more 'live', the video is only 30 fps

If you (and no one else?) gets that, I guess the problem comes from my
install, somewhere.

C M wrote:
>
>
> On Thu, Jul 9, 2009 at 3:40 AM, guillaume ranquet <granq...@wyplay.com
> <mailto:granq...@wyplay.com>> wrote:
>
>     Hi again.
>
>     I found out that removing the resize handler of the wxpanel gives me a
>     nice animated plot that works as expected (but with no resize :-/)
>
>     def _SetSize(self):
>        pixels = tuple(self.parent.GetClientSize())
>        self.SetSize(pixels)
>        self.canvas.SetSize(pixels)
>        self.figure.set_size_inches(float(pixels[0])/self.figure.get_dpi(),
>                       float(pixels[1])/self.figure.get_dpi(),forward=True)
>
>
>     I took that code from:
>     http://www.scipy.org/Matplotlib_figure_in_a_wx_panel
>     any hints on what to do from there?
>
>
> I have run your code and I am not sure what your issue is.  What is
> wrong with how it is behaving?  You say in the first post, "the
> resizing of the window make the plot look terribly broken", but I am
> not seeing that.  And what platform and version of wx and mpl are you
> using? 
>
> Che
>  
>
>
>     guillaume ranquet wrote:
>     > Hi list (yes, me, again :D)
>     >
>     > I'm having difficulties with matplotlib svn (rev 7249) and
>     animations.
>     > I'm a bit lost on what I have to do to get my animation running
>     smoothly?
>     >
>     > I had various attempts, It seems that the best result I can have
>     is by
>     > totally skipping the canvas.restore_region(self.background)
>     shown in the
>     > examples : the resizing of the window make the plot look
>     terribly broken
>     >
>     > sorry for this question that seems well covered by documentation and
>     > examples :S
>     > I'm attaching a sample code that reproduces the behavior of my
>     app, It's
>     > a bit long but I hope there's some good things in it that can be
>     usefull
>     > to others :)
>     >
>     >
>     > ===code snippet===
>     > import wxversion
>     > wxversion.ensureMinimal('2.8')
>     >
>     > import numpy as np
>     > import matplotlib.pyplot as plt
>     >
>     > from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as
>     > FigureCanvas
>     >
>     > import wx
>     > import wx.aui
>     >
>     > from matplotlib.figure import Figure
>     > import sys
>     > import getopt
>     > from threading import *
>     > from itertools import izip
>     > import time
>     >
>     > class myplotData(Figure):
>     >     def __init__(self,name,width=5,height=4,dpi=60,x_axis=None):
>     >         Figure.__init__(self,figsize=(width, height),dpi=dpi)
>     >         self.name <http://self.name> = name
>     >         self.ax = self.add_subplot(111,label=name,animated=True)
>     >         self.bg <http://self.bg> = None
>     >         self.mdirty = False
>     >
>     >     def refreshbg(self):
>     >         self.bg <http://self.bg> =
>     self.canvas.copy_from_bbox(self.ax.bbox)
>     >
>     >     def feed(self,n):
>     >         timestamp = n[0]
>     >         self.n = 0
>     >         if self.bg <http://self.bg> == None:
>     >             self.canvas = self.ax.figure.canvas
>     >             self.canvas.draw()
>     >             self.bg <http://self.bg> =
>     self.canvas.copy_from_bbox(self.ax.bbox)
>     >             for xs in n[1:]:
>     >                 self.ax.plot([timestamp],[xs],animated=True)
>     >             return
>     >         #self.canvas.restore_region(self.bg <http://self.bg>)
>     >         mylines = self.ax.get_lines()
>     >         for xs,line in izip(n[1:],mylines):
>     >             x,y = line.get_data()
>     >             x = np.concatenate((x,[timestamp]))
>     >             y = np.concatenate((y,[xs]))
>     >             line.set_data([x,y])
>     >             self.ax.set_xlim(xmax=timestamp)
>     >             curyminlim,curymaxlim = self.ax.get_ylim()
>     >
>     > self.ax.set_ylim(ymin=min(xs,curyminlim),ymax=max(xs,curymaxlim))
>     >             self.ax.draw_artist(line)
>     >         self.mdirty = True
>     >         wx.WakeUpIdle()
>     >
>     >     def blit(self):
>     >         if self.mdirty:
>     >             self.mdirty = False
>     >             self.canvas.blit(self.ax.get_figure().bbox)
>     >
>     > class CanvasPanel(wx.Panel):
>     >     def __init__(self,name,callback=None,parent=None):
>     >         wx.Panel.__init__(self, parent)
>     >         self.SetSize((120, 80))
>     >         self.figure = myplotData(name)
>     >         self.canvas = FigureCanvas(self,-1,self.figure)
>     >         self.parent = parent
>     >         self.callback = callback
>     >         color = (255,255,255)
>     >         self.SetColor(color)
>     >         self._SetSize()
>     >         self._resizeflag = False
>     >         self.Bind(wx.EVT_IDLE, self._onIdle)
>     >         self.Bind(wx.EVT_SIZE, self._onSize)
>     >
>     >     def SetColor(self,rgbtuple=None):
>     >         """Set figure and canvas colours to be the same."""
>     >         if rgbtuple is None:
>     >             rgbtuple =
>     > wx.SystemSettings.GetColour(wx.SYS_COLOUR_BTNFACE).Get()
>     >         clr = [c/255. for c in rgbtuple]
>     >         self.figure.set_facecolor(clr)
>     >         self.figure.set_edgecolor(clr)
>     >         self.canvas.SetBackgroundColour(wx.Colour(*rgbtuple))
>     >
>     >     def _onSize(self,event):
>     >         self._resizeflag = True
>     >
>     >     def _onIdle(self,evt):
>     >         if self._resizeflag:
>     >             self._resizeflag = False
>     >             self._SetSize()
>     >         self.figure.blit()
>     >
>     >     def _SetSize(self):
>     >         pixels = tuple(self.parent.GetClientSize())
>     >         self.SetSize(pixels)
>     >         self.canvas.SetSize(pixels)
>     >        
>     self.figure.set_size_inches(float(pixels[0])/self.figure.get_dpi(),
>     >                                    
>     float(pixels[1])/self.figure.get_dpi())
>     >         #self.figure.refreshbg()
>     >
>     >     def process(self,data):
>     >         if self.callback != None:
>     >             x = self.callback(data)
>     >             self.figure.feed(x)
>     >         else:
>     >             self.figure.feed(data)
>     >
>     > # Define notification event for thread notifications
>     > EVT_RESULT_ID = wx.NewId()
>     >
>     > def EVT_RESULT(win, func):
>     >     """Define Result Event."""
>     >     win.Connect(-1, -1, EVT_RESULT_ID, func)
>     >
>     > class ResultEvent(wx.PyEvent):
>     >     """Simple event to carry arbitrary result data."""
>     >     def __init__(self, data):
>     >         """Init Result Event."""
>     >         wx.PyEvent.__init__(self)
>     >         self.SetEventType(EVT_RESULT_ID)
>     >         self.data = data
>     >
>     > class ParserThread(Thread):
>     >     def __init__(self,source,notify_window):
>     >         Thread.__init__(self)
>     >         self._notify_window = notify_window
>     >         self.data = np.arange(0,2*np.pi,0.01)
>     >         self.n = 0
>     >         self.round = 0
>     >         self.start()
>     >
>     >     def run(self):
>     >         while(1):
>     >             mbuff = {}
>     >             mbuff['name'] = "My Sin Plot"
>     >             mbuff['x'] = self.data[self.n] + self.round*2*np.pi
>     >             mbuff['y1'] = np.sin(mbuff['x'])
>     >             mbuff['y2'] = np.sin(mbuff['x'] + np.pi/2)
>     >             self.n+=1
>     >             if self.n == len(self.data):
>     >                 self.n = 0
>     >                 self.round += 1
>     >             wx.PostEvent(self._notify_window,
>     ResultEvent(('test',[mbuff])))
>     >             time.sleep(.1)
>     >
>     > def mycback(data):
>     >     return data['x'],data['y1'],data['y2']
>     >
>     > class MyApp(wx.Frame):
>     >
>     >     def __init__(self,parent=None,
>     > id=wx.ID_ANY,pos=wx.DefaultPosition,size=wx.DefaultSize,
>     > style=wx.DEFAULT_FRAME_STYLE):
>     >         wx.Frame.__init__(self, parent)
>     >         self.bestsize = (120,75)
>     >         self.SetSize(self.GetBestSize())
>     >         self.panel = wx.Panel(self,wx.ID_ANY)
>     >         self.panel.nb = wx.aui.AuiNotebook(self.panel)
>     >         self.label =
>     wx.StaticText(self.panel.nb,wx.ID_ANY,"\n\n\n\naaa\n")
>     >         self.panel.nb.AddPage(self.label, "txt")
>     >         sizer = wx.BoxSizer()
>     >         sizer.Add(self.panel.nb, 1, wx.EXPAND)
>     >         self.panel.SetSizer(sizer)
>     >         self.plotlist = {}
>     >         self.Fit()
>     >         EVT_RESULT(self,self.OnResult)
>     >         self.worker = ParserThread(5758,self)
>     >
>     >     def OnResult(self,event):
>     >         tag,mbuff = event.data
>     >         if tag == -1:
>     >             return
>     >         for buff in mbuff:
>     >             if not self.plotlist.has_key(buff['name']):
>     >                 cback = mycback
>     >                 page =
>     CanvasPanel(buff['name'],mycback,self.panel.nb)
>     >                 self.panel.nb.AddPage(page,buff['name'])
>     >                 self.plotlist[buff['name']] = page
>     >             myPlot = self.plotlist[buff['name']]
>     >             myPlot.process(buff)
>     >
>     > def main(argv=None):
>     >     if argv != None:
>     >         sys.argv = argv
>     >     app = wx.App()
>     >     frame = MyApp()
>     >     frame.Show()
>     >     app.MainLoop()
>     >
>     > if __name__ == "__main__":
>     >     main()
>     > ===code snippet===
>     > ----
>     > This message contains confidential information and may contain
>     information that is legally privileged.  If you have received this
>     message by mistake, please immediately notify us and delete the
>     original message. Thank you.
>     >
>     > Ce message contient des informations confidentielles.  S'il vous
>     est parvenu par erreur, merci de bien vouloir nous en aviser par
>     retour, de n'en faire aucun usage et de n'en garder aucune copie.
>     > ----
>     >
>     >
>     
> ------------------------------------------------------------------------------
>     > Enter the BlackBerry Developer Challenge
>     > This is your chance to win up to $100,000 in prizes! For a
>     limited time,
>     > vendors submitting new applications to BlackBerry App World(TM)
>     will have
>     > the opportunity to enter the BlackBerry Developer Challenge. See
>     full prize
>     > details at: http://p.sf.net/sfu/Challenge
>     > _______________________________________________
>     > Matplotlib-users mailing list
>     > Matplotlib-users@lists.sourceforge.net
>     <mailto:Matplotlib-users@lists.sourceforge.net>
>     > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>     ----
>     This message contains confidential information and may contain
>     information that is legally privileged.  If you have received this
>     message by mistake, please immediately notify us and delete the
>     original message. Thank you.
>
>     Ce message contient des informations confidentielles.  S'il vous
>     est parvenu par erreur, merci de bien vouloir nous en aviser par
>     retour, de n'en faire aucun usage et de n'en garder aucune copie.
>     ----
>
>     
> ------------------------------------------------------------------------------
>     Enter the BlackBerry Developer Challenge
>     This is your chance to win up to $100,000 in prizes! For a limited
>     time,
>     vendors submitting new applications to BlackBerry App World(TM)
>     will have
>     the opportunity to enter the BlackBerry Developer Challenge. See
>     full prize
>     details at: http://p.sf.net/sfu/Challenge
>     _______________________________________________
>     Matplotlib-users mailing list
>     Matplotlib-users@lists.sourceforge.net
>     <mailto:Matplotlib-users@lists.sourceforge.net>
>     https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Enter the BlackBerry Developer Challenge  
> This is your chance to win up to $100,000 in prizes! For a limited time, 
> vendors submitting new applications to BlackBerry App World(TM) will have
> the opportunity to enter the BlackBerry Developer Challenge. See full prize  
> details at: http://p.sf.net/sfu/Challenge
> ------------------------------------------------------------------------
>
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>   


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to