class PlotFigure(wxFrame): def __init__(self): wxFrame.__init__(self, None, -1, "Test embedded wxFigure") self.fig = Figure((5,4), 75) self.canvas = FigureCanvasWxAgg(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 # Now put all into a sizer sizer = wxBoxSizer(wxVERTICAL) # This way of adding to sizer allows resizing sizer.Add(self.canvas, 1, wxLEFT|wxTOP|wxGROW) # Best to allow the toolbar to resize! sizer.Add(self.toolbar, 0, wxGROW) self.SetSizer(sizer) self.Fit() EVT_TIMER(self, TIMER_ID, self.onTimer) def init_plot_data(self): # jdh you can add a subplot directly from the fig rather than # the fig manager a = self.fig.add_subplot(111) self.x = numerix.arange(120.0)*2*numerix.pi/120.0 self.x.resize((100,120)) self.y = numerix.arange(100.0)*2*numerix.pi/100.0 self.y.resize((120,100)) self.y = numerix.transpose(self.y) z = numerix.sin(self.x) + numerix.cos(self.y) self.im = a.imshow( z, cmap=cm.jet)#, interpolation='nearest') def GetToolBar(self): # You will need to override GetToolBar if you are using an # unmanaged toolbar in your frame return self.toolbar def onTimer(self, evt): self.x += numerix.pi/15 self.y += numerix.pi/20 z = numerix.sin(self.x) + numerix.cos(self.y) self.im.set_array(z) self.canvas.draw() #self.canvas.gui_repaint() # jdh wxagg_draw calls this already def onEraseBackground(self, evt): # this is supposed to prevent redraw flicker on some X servers... pass
class HistPlotPanel(wx.Panel): def __init__(self, parent, id, size=(4, 3), dpi=75, **kwds): wx.Panel.__init__(self, parent, id) import wxmpl.wxmpl as wxmpl self.canvas = wxmpl.PlotPanel(self, -1, size=size, dpi=dpi) self.figure = self.canvas.figure self.figure.add_subplot(111) 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(wx.Size(fw, th)) # Create a figure manager to manage things self.figmgr = FigureManager(self.canvas, 1, self) # Now put all into a sizer sizer = wx.BoxSizer(wx.VERTICAL) # This way of adding to sizer allows resizing sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW) # add a spacer between figure and toolbar sizer.AddSpacer((10, 10)) # Best to allow the toolbar to resize! sizer.Add(self.toolbar, 0, wx.GROW) self.SetSizer(sizer) self.sizer = sizer self.SetAutoLayout(1) sizer.Fit(self) #FigureCanvasWxAgg.__init__(self, parent, id, Figure(size, dpi) ) from histogram.plotter import HistogramMplPlotter as HMP self.plotter = HMP(self.figure) shelf = self.getShelf() shelf.update({"plot": Plot(self)}) return def GetToolBar(self): return self.toolbar def getShelf(self): return self.GetParent().getShelf() def showHist(self, histIdentifier): hist = self.getShelf().get(histIdentifier) if hist is None: print("Unable to retrieve histogram %s" % histIdentifier) return self.currentHist = hist self.showCurrentHist() return def showCurrentHist(self): hist = self.currentHist self.plotter.plot(hist) self.Refresh() return pass # end of HistPlotPanel