schainPlot.py
270 lines
| 6.8 KiB
| text/x-python
|
PythonLexer
|
r129 | |||
import numpy | ||||
import schainPlplotLib | ||||
class Figure: | ||||
__driverObj = None | ||||
__isDriverOpen = False | ||||
__isFigureOpen = False | ||||
__isConfig = False | ||||
|
r130 | __xw = None | ||
__yw = None | ||||
xmin = None | ||||
xmax = None | ||||
minvalue = None | ||||
maxvalue = None | ||||
|
r129 | |||
idfigure = None | ||||
nframes = None | ||||
wintitle = wintitle | ||||
colormap = None | ||||
driver = None | ||||
overplot = None | ||||
frameObjList = [] | ||||
|
r132 | def __init__(self, idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colormap='br_green', *showGraphs): | ||
|
r129 | |||
|
r132 | self.driver = driver | ||
|
r129 | self.idfigure = idfigure | ||
|
r132 | self.nframes = nframes | ||
|
r129 | self.wintitle = wintitle | ||
self.overplot = overplot | ||||
|
r132 | 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) | ||||
|
r129 | |||
|
r132 | self.__driverObj.driver.configDriver() | ||
|
r129 | |||
def __openDriver(self): | ||||
|
r132 | self.__driverObj.driver.openDriver() | ||
|
r129 | |||
def __openFigure(self): | ||||
nrows, ncolumns = self.getSubplots() | ||||
|
r132 | self.__driverObj.driver.openFigure() | ||
self.__driverObj.driver.setSubPlots(nrows, ncolumns) | ||||
|
r129 | |||
|
r130 | def __isOutOfXRange(self, x): | ||
|
r129 | pass | ||
|
r130 | def __changeXRange(self, x): | ||
|
r129 | pass | ||
|
r130 | |||
def __createFrames(self): | ||||
|
r129 | |||
|
r130 | 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) | ||||
|
r129 | if not(self.__isDriverOpen): | ||
self.__openDriver() | ||||
self.__isDriverOpen = True | ||||
if not(self.__isConfig): | ||||
|
r130 | 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) | ||||
|
r129 | |||
|
r130 | self.__createFrames() | ||
|
r129 | self.__isConfig = True | ||
|
r130 | |||
if not(self.__isOutOfXRange(x)): | ||||
self.__changeXRange(x) | ||||
|
r129 | if self.__isFigureOpen: | ||
|
r130 | self.__driverObj.closePage() | ||
|
r129 | self.__isFigureOpen = False | ||
if not(self.__isFigureOpen): | ||||
self.__openFigure() | ||||
|
r130 | |||
for channel in channelList: | ||||
frameObj = self.frameObjList[channel] | ||||
frameObj.init(xmin=xmin, | ||||
xmax=xmax, | ||||
minvalue=minvalue, | ||||
maxvalue=maxvalue) | ||||
|
r129 | self.__isFigureOpen = True | ||
for channel in channelList: | ||||
|
r130 | dataCh = data1D[channel] | ||
frameObj = self.frameObjList[channel] | ||||
frameObj.clearData() | ||||
|
r129 | frameObj.plot(dataCh) | ||
|
r130 | |||
frameObj.refresh() | ||||
|
r129 | |||
if not(self.overplot): | ||||
|
r130 | self.__driverObj.closeFigure() | ||
|
r129 | 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): | ||||
|
r132 | |||
raise ValueError, "No implemented" | ||||
|
r129 | |||
class Frame: | ||||
|
r130 | """ | ||
subplots | ||||
""" | ||||
|
r129 | plotObjList = [] | ||
|
r130 | def __init__(self, idframe, showGraph1=False, showGraph2=False): | ||
|
r129 | |||
|
r130 | self.idframe = idframe | ||
|
r129 | self.showGraph1 = showGraph1 | ||
self.showGraph2 = showGraph2 | ||||
|
r130 | self.nplots = 1 + showGraph1 + showGraph2 | ||
self.__createPlots() | ||||
|
r129 | |||
|
r130 | def __createPlots(self): | ||
|
r129 | |||
|
r130 | 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 | ||||
|
r129 | |||
def __getScreenPosGraph1(self): | ||||
|
r130 | xi = 1.2 | ||
yi = 2.3 | ||||
xw = 2.0 | ||||
yw = 1.4 | ||||
|
r129 | |||
|
r130 | return xi, yi, xw, yw | ||
|
r129 | |||
def __getScreenPosGraph2(self): | ||||
|
r130 | xi = 1.2 | ||
yi = 2.3 | ||||
xw = 2.0 | ||||
yw = 1.4 | ||||
|
r129 | |||
|
r130 | return xi, yi, xw, yw | ||
|
r129 | |||
def __getScreenPos(self, nplot): | ||||
if nplot == 0: | ||||
|
r130 | xi, yi, xw, yw = self.__getScreenPosMain() | ||
|
r129 | if nplot == 1: | ||
|
r130 | xi, yi, xw, yw = self.__getScreenPosMain() | ||
|
r129 | if nplot == 2: | ||
|
r130 | xi, yi, xw, yw = self.__getScreenPosMain() | ||
|
r129 | |||
|
r130 | return xi, yi, xw, yw | ||
def init(self, xmin, xmax, ymin, yamx, minvalue, maxvalue): | ||||
|
r129 | |||
|
r130 | """ | ||
""" | ||||
for plotObj in self.plotObjList: | ||||
plotObj.plotBox(xmin, xmax, ymin, yamx, minvalue, maxvalue) | ||||
|
r129 | |||
|
r130 | def clearData(self): | ||
|
r129 | pass | ||
|
r130 | |||
|
r129 | def plot(self, data): | ||
|
r130 | |||
for plotObj in self.plotObjList: | ||||
plotObj.plotData(data) | ||||
def refresh(self): | ||||
pass | ||||
|
r129 | |||
class Plot: | ||||
|
r130 | def __init__(self, xi, yi, xw, yw): | ||
|
r129 | |||
|
r130 | self.xi = xi | ||
self.yi = yi | ||||
self.xw = xw | ||||
self.yw = yw | ||||
|
r129 | |||
|
r130 | def __setRange(self, xrange, yrange, zrange): | ||
|
r129 | pass | ||
|
r130 | def __setLabels(self, xlabel, ylabel, zlabel): | ||
|
r129 | pass | ||
|
r130 | |||
|
r129 | |||
|
r130 | def plotBox(self,xmin, xmax, ymin, yamx, minvalue, maxvalue): | ||
|
r129 | pass | ||
def plotData(self): | ||||
|
r130 | |||
raise ValueError, "" | ||||
|
r129 | |||