import numpy import schainPlplotLib class Figure: __driverObj = None __isDriverOpen = False __isFigureOpen = False __isConfig = False __xw = None __yw = None xmin = None xmax = None minvalue = None maxvalue = None idfigure = None nframes = None wintitle = wintitle colormap = None driver = None overplot = None frameObjList = [] def __init__(self, idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colormap='br_green', *showGraphs): self.driver = driver self.idfigure = idfigure self.nframes = nframes self.wintitle = wintitle self.overplot = overplot self.colormap = colormap self.showGraph1 = showGraphs[0] self.showGraph2 = showGraphs[1] self.__xw = xw self.__yw = yw self.__driverObj = Driver(driver, idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs) self.__driverObj.driver.configDriver() def __openDriver(self): self.__driverObj.driver.openDriver() def __openFigure(self): nrows, ncolumns = self.getSubplots() self.__driverObj.driver.openFigure() self.__driverObj.driver.setSubPlots(nrows, ncolumns) def __isOutOfXRange(self, x): pass def __changeXRange(self, x): pass def __createFrames(self): for frame in range(self.nframes): frameObj = Frame(idframe = frame, showGraph1 = self.showGraph1, showGraph2 = self.showGraph2 ) self.frameObjList.append(frameObj) def plot1DArray(self, data1D, x=None, channelList=None, xmin=None, xmax=None, minvalue=None, maxvlaue=None, save=False, gpath='./'): nx, ny = data1D.shape if channelList == None: chanellList = range(nx) if x == None: x = numpy.arange(data1D.size) if not(self.__isDriverOpen): self.__openDriver() self.__isDriverOpen = True if not(self.__isConfig): if self.xmin == None: xmin = numpy.min(x) if self.xmax == None: xmax = numpy.max(x) if self.minvalue == None: minvalue = numpy.min(data1D) if self.maxvalue == None: maxvalue = numpy.max(data1D) self.__createFrames() self.__isConfig = True if not(self.__isOutOfXRange(x)): self.__changeXRange(x) if self.__isFigureOpen: self.__driverObj.closePage() self.__isFigureOpen = False if not(self.__isFigureOpen): self.__openFigure() for channel in channelList: frameObj = self.frameObjList[channel] frameObj.init(xmin=xmin, xmax=xmax, minvalue=minvalue, maxvalue=maxvalue) self.__isFigureOpen = True for channel in channelList: dataCh = data1D[channel] frameObj = self.frameObjList[channel] frameObj.clearData() frameObj.plot(dataCh) frameObj.refresh() if not(self.overplot): self.__driverObj.closeFigure() self.__isFigureOpen = False def plot2DArray(self, x, y, data2D, xmin=None, xmax=None, ymin=None, ymax=None, minvalue=None, maxvalue=None, save=False, gpath='./'): if not(self.__isCOpen): self.__createFrames() self.__openFigure() self.__isOpen = True if not(self.__isConfig): self.setRange(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, minvalue=minvalue, maxvalue=maxvalue) self.__isConfig = True for channel in channelList: dataCh = dataArray[channel] frameObj = frameObjList[channel] frameObj.plot(dataCh) def saveFigure(self, filename): pass def getSubplots(self): raise ValueError, "No implemented" class Frame: """ subplots """ plotObjList = [] def __init__(self, idframe, showGraph1=False, showGraph2=False): self.idframe = idframe self.showGraph1 = showGraph1 self.showGraph2 = showGraph2 self.nplots = 1 + showGraph1 + showGraph2 self.__createPlots() def __createPlots(self): for nplot in range(self.nplots): xi, yi, xw, yw = self.__getScreenPos(nplot) plotObj = Plot(xi, yi, xw, yw) self.plotObjList.append(plotObj) def __getScreenPosMainPlot(self): """ Calcula las coordenadas asociadas al plot principal. """ xi = 1.2 yi = 2.3 xw = 2.0 yw = 1.4 return xi, yi, xw, yw def __getScreenPosGraph1(self): xi = 1.2 yi = 2.3 xw = 2.0 yw = 1.4 return xi, yi, xw, yw def __getScreenPosGraph2(self): xi = 1.2 yi = 2.3 xw = 2.0 yw = 1.4 return xi, yi, xw, yw def __getScreenPos(self, nplot): if nplot == 0: xi, yi, xw, yw = self.__getScreenPosMain() if nplot == 1: xi, yi, xw, yw = self.__getScreenPosMain() if nplot == 2: xi, yi, xw, yw = self.__getScreenPosMain() return xi, yi, xw, yw def init(self, xmin, xmax, ymin, yamx, minvalue, maxvalue): """ """ for plotObj in self.plotObjList: plotObj.plotBox(xmin, xmax, ymin, yamx, minvalue, maxvalue) def clearData(self): pass def plot(self, data): for plotObj in self.plotObjList: plotObj.plotData(data) def refresh(self): pass class Plot: def __init__(self, xi, yi, xw, yw): self.xi = xi self.yi = yi self.xw = xw self.yw = yw def __setRange(self, xrange, yrange, zrange): pass def __setLabels(self, xlabel, ylabel, zlabel): pass def plotBox(self,xmin, xmax, ymin, yamx, minvalue, maxvalue): pass def plotData(self): raise ValueError, ""