Exemplo n.º 1
0
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
Exemplo n.º 2
0
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