From: Flavio C. C. <fcc...@fi...> - 2004-03-11 16:12:08
|
Hi I have a variant of the embedding_in_wx script that worked fine on my previous version of matplotlib. Now, with version 0.51 it's seg faulting. I updated the script to reflect the changes in the library but still... Can anyone see what may be going wrong? thanks here is my script: ----------------------------------------------------------------------------- # Name: PlotFigure.py # Purpose: Plotting frame that contains the plots generated by Model Buider # # Author: Flavio C. Coelho # # Created: 2004/09/01 # RCS-ID: $Id: PlotFigure.py,v 1.1 2004/01/13 10:51:43 fccoelho Exp $ # Copyright: (c) 2003 # Licence: GPL # Obs: This code was based on Jeremy Donoghue's embedding_in_wx.py included with # matplotlib. #----------------------------------------------------------------------------- #Boa:Frame:PlotFigure import matplotlib matplotlib.use('WX') from matplotlib.backends.backend_wx import Toolbar, FigureCanvasWx, FigureManager from matplotlib.figure import Figure from matplotlib.axes import Subplot import matplotlib.numerix as numpy from RandomArray import * from wxPython.wx import * def create(parent): return PlotFigure(parent) [wxID_PLOTFIGURE] = map(lambda _init_ctrls: wxNewId(), range(1)) class PlotFigure(wxFrame): def _init_ctrls(self, prnt): # generated method, don't edit wxFrame.__init__(self, id=wxID_PLOTFIGURE, name='Output', parent=prnt, pos=wxPoint(480, 335), size=wxSize(640, 480), style=wxDEFAULT_FRAME_STYLE, title='Results') self.SetClientSize(wxSize(1280, 893)) def __init__(self, parent): self._init_ctrls(parent) self.fig = Figure((10,8), 75) self.canvas = FigureCanvasWx(self,-1, self.fig) self.toolbar = Toolbar(self.canvas) self.toolbar.Realize() # On Windows, default frame size behaviour is incorrect # you don't need this under Linux tw, th = self.toolbar.GetSizeTuple() fw, fh = self.canvas.GetSizeTuple() self.toolbar.SetSize(wxSize(fw, th)) # Create a figure manager to manage things self.figmgr = FigureManager(self.canvas, 1, self) # Now put all into a sizer sizer = wxBoxSizer(wxVERTICAL) # This way of adding to sizer prevents resizing #sizer.Add(self.fig, 0, wxLEFT|wxTOP) # This way of adding to sizer allows resizing sizer.Add(self.fig, 1, wxLEFT|wxTOP|wxGROW) # Best to allow the toolbar to resize! sizer.Add(self.toolbar, 0, wxGROW) self.SetSizer(sizer) self.Fit() def plot_data(self, x,y): """ This function will plot the time series as output by odeint. """ # Use this line if using a toolbar a = self.figmgr.add_subplot(111) # Or this one if there is no toolbar #a = Subplot(self.fig, 111) nvar = min(y[0].shape) for i in range(nvar): a.plot (x,y[0][:,i]) #plot (x,timeseries[1]) a.set_xlabel('Time') a.set_ylabel('Y[i]') a.set_title('Time series') #---generating tuple of legends------------------------------------------------- b = range(nvar) leg = tuple(['y['+str(i)+']' for i in b]) #------------------------------------------------------------------------------- a.legend(leg) self.toolbar.update() def plotStats(self,x, ts): """ This function will plot prior an posteriors for the model variables and parameters. """ # Use this line if using a toolbar a = self.figmgr.add_subplot(111) # Or this one if there is no toolbar #a = Subplot(self.fig, 111) a.plot(x,ts[0], 'r-o',x,ts[1],'b-.', x,ts[2],'b-.') def plotDist(data,vname): """ Plots histograms ofthe prior and posterior distributions of the model components meldOut is the output of the Melding.SIR function: (w,qtiltheta,qtilphi,q1est) """ # Use this line if using a toolbar a = self.figmgr.add_subplot(111) # Or this one if there is no toolbar #a = Subplot(self.fig, 111) nb, bins, patches = a.hist(data, normed=1) a.set_title('Prior Distribution') a.set_xtitle(vname) nvp = len(priors) # Get number of variable + parameters in the model) nlik = len (liks) # Get number of likelihood functions for i in range(nvp): nb, bins, patches = a.hist(priors[i], normed=1) if i > 0: a.figure(i+1) a.set_title('Prior Distribution') def GetToolBar(self): # You will need to override GetToolBar if you are using an # unmanaged toolbar in your frame return self.toolbar if __name__ == '__main__': app = wxPySimpleApp() frame = create(None) x = normal(0,1,50) y = normal(0,1,(5,50)) frame.plot_data(x,y) frame.Show() app.MainLoop() |