class slicePanel(wx.Panel): ''' This is the 1D plot panel which displays the slices which the user selects ''' def __init__(self, parent): wx.Panel.__init__(self, parent, style=wx.BORDER_SUNKEN) self.sliceFigure = Figure(frameon=True, figsize=(2, 3)) self.sliceFigure.set_facecolor('.82') self.sliceCanvas = FigureCanvas(self, -1, self.sliceFigure) self.sliceCanvas.SetAutoLayout(False) self.box = Toolbar(self.sliceCanvas) self.box.Hide() self.box.zoom() self.fm = FigureManagerBase(self.sliceCanvas, 1) _pylab_helpers.Gcf.set_active(self.fm) self.sliceAxis = self.sliceFigure.add_axes([0.1, 0.2, 0.8, 0.7]) sliceSizer = wx.BoxSizer(wx.VERTICAL) sliceSizer.Add(self.sliceCanvas, 1, wx.EXPAND | wx.RIGHT | wx.LEFT, border=1) self.SetSizer(sliceSizer) return def updatePlot(self, data, xaxis, legLab, xlabel, ylabel, title, scale, legTog): ''' The user can select a new slice at any time to plot on the 1D panel. This method refreshes the plot so that the new data is displayed. ''' self.sliceAxis.cla() self.linePlot = self.sliceAxis.plot(xaxis, (array(data).T)) xlim((min(xaxis), max(xaxis))) self.sliceAxis.leg = legend(legLab) self.sliceAxis.leg.set_visible(legTog) self.sliceAxis.set_xlabel(xlabel) self.sliceAxis.set_ylabel(ylabel) self.sliceAxis.set_title(title) self.sliceAxis.set_yscale(str(scale)) draw() return
class MultiViewPanel(wx.Panel): ''' This is top panel which displays all of the 2D plots in the notebook it is somewhat rigid because it was written prior to the rest of the GUI. ''' def __init__(self, parent, id, data, extent, titles, axLabel, vlimit, selMask, scale='log'): wx.Panel.__init__(self, parent, id, style=wx.BORDER_SUNKEN) FIGPROPS = dict(figsize=(5.0, (5.0 / 1.618)), dpi=64) #self.SetBackgroundColour('red') ADJUSTPROPS = dict(left=0.1, bottom=0.1, right=0.97, top=0.94, wspace=0.01, hspace=0.01) viewIdx = argwhere(selMask).flatten() viewCount = size(viewIdx) self.plotFigure = Figure(frameon=True, **FIGPROPS) self.plotFigure.set_facecolor('.82') self.plotCanvas = FigureCanvas(self, -1, self.plotFigure) self.plotFigure.subplots_adjust(**ADJUSTPROPS) fm = FigureManagerBase(self.plotCanvas, 0) _pylab_helpers.Gcf.set_active(fm) if (scale == 'linear'): plotData = data vmin = vlimit[0] vmax = vlimit[1] elif (scale == 'log'): plotData = log10(data) vmin = log10(vlimit[0]) vmax = log10(vlimit[1]) for i in range(viewCount): plotData[viewIdx[i]][data[viewIdx[i]] == 0.0] = vmin depth = ceil(float(viewCount / 2.0)) self.axes = [None] * int(viewCount) self.im = [None] * int(viewCount) if (viewCount == 1): col = 1 row = 1 elif (viewCount == 5): col = 3 row = 2 elif (viewCount % 3.0 == 0.0): col = 3 row = (int(viewCount / 3.0)) elif (viewCount % 2.0 == 0.0): col = 2 row = (int(viewCount / 2.0)) else: print 'Plot Layout Could Not Be Built' for i in range(viewCount): if i == 0: self.axes[i] = self.plotFigure.add_subplot(row, col, i + 1) else: self.axes[i] = self.plotFigure.add_subplot(row, col, i + 1, sharex=self.axes[0], sharey=self.axes[0]) self.im[i] = self.axes[i].imshow(plotData[viewIdx[i]].T, origin='lower', interpolation='nearest', extent=extent, aspect='auto', vmin=vmin, vmax=vmax) self.axes[i].set_gid(viewIdx[i]) if viewCount > 1: self.axes[i].text(0.01, .92, titles[viewIdx[i]], fontsize=14, bbox=dict(facecolor='white', alpha=0.5), transform=self.axes[i].transAxes) self.plotFigure.text(0.54, 0.01, axLabel[0], ha='center', va='bottom', fontsize=14) self.plotFigure.text(0.01, .5, axLabel[1], ha='left', va='center', rotation='vertical', fontsize=14) else: self.axes[i].set_title(titles[viewIdx[i]]) self.axes[i].set_xlabel(axLabel[0], fontsize=14) self.axes[i].set_ylabel(axLabel[1], fontsize=14) self.plotFigure.colorbar(self.im[i]) if i + 1 <= viewCount - col: setp(self.axes[i].get_xticklabels(), visible=False) if ((i + 1) % (viewCount / row) == 0.0 and viewCount != 1): setp(self.axes[i].get_yticklabels(), visible=False) self.box = Toolbar(self.plotCanvas) self.box.Hide() multiViewSizer = wx.BoxSizer(wx.HORIZONTAL) multiViewVert = wx.BoxSizer(wx.VERTICAL) multiViewSizer.Add(self.plotCanvas, 1, wx.EXPAND | wx.RIGHT | wx.LEFT, border=1) multiViewVert.Add(multiViewSizer, 1, wx.EXPAND | wx.TOP | wx.BOTTOM, border=1) self.SetSizer(multiViewVert) return