schainPlot.py
293 lines
| 8.7 KiB
| text/x-python
|
PythonLexer
|
r133 | import numpy | |
|
r134 | from schainPlotLib import Driver | |
|
r133 | ||
class Figure: | |||
__isDriverOpen = False | |||
__isFigureOpen = False | |||
__isConfig = False | |||
|
r135 | drvObj = None | |
|
r133 | idfigure = None | |
nframes = None | |||
|
r134 | wintitle = None | |
|
r133 | colormap = None | |
driver = None | |||
overplot = None | |||
|
r135 | xmin = None | |
xmax = None | |||
minvalue = None | |||
maxvalue = None | |||
|
r133 | frameObjList = [] | |
|
r135 | figtitle = "" | |
|
r133 | ||
|
r135 | def __init__(self,idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colorbar= True, colormap=None, *args): | |
|
r133 | self.idfigure = idfigure | |
self.nframes = nframes | |||
self.wintitle = wintitle | |||
|
r135 | self.xw = xw | |
self.yw = yw | |||
|
r133 | self.overplot = overplot | |
|
r135 | self.colorbar = colorbar | |
|
r133 | self.colormap = colormap | |
|
r135 | #esta seccion deberia ser dinamica de acuerdo a len(args) | |
self.showGraph1 = args[0] | |||
self.showGraph2 = args[1] | |||
|
r133 | ||
|
r135 | self.drvObj = Driver(driver, idfigure, xw, yw, wintitle, overplot, colorbar, colormap) | |
|
r133 | ||
|
r135 | self.drvObj.driver.setFigure() | |
|
r133 | ||
|
r135 | ||
|
r133 | def __openDriver(self): | |
|
r135 | self.drvObj.driver.openDriver() | |
|
r133 | ||
|
r135 | # def __openFigure(self): | |
# nrows, ncolumns = self.getSubplots() | |||
# self.drvObj.driver.openFigure() | |||
# self.drvObj.driver.setTitleFig(title) | |||
# self.drvObj.driver.setSubPlots(nrows, ncolumns) | |||
|
r133 | ||
|
r135 | def __initFigure(self): | |
|
r133 | nrows, ncolumns = self.getSubplots() | |
|
r135 | self.drvObj.driver.openFigure() | |
self.drvObj.driver.setFigTitle(self.figtitle) | |||
self.drvObj.driver.setSubPlots(nrows, ncolumns) | |||
|
r133 | ||
|
r135 | def __isOutOfXRange(self,x): | |
return 1 | |||
def __refresh(self): | |||
self.drvObj.driver.refresh() | |||
def createFrames(self): | |||
raise ValueError, "No implemented" | |||
|
r138 | def plot1DArray(self, data1D, x=None, channelList=None, xmin=None, xmax=None, minvalue=None, maxvalue=None, figuretitle=None, save=False, gpath='./'): | |
|
r133 | ||
nx, ny = data1D.shape | |||
if channelList == None: | |||
|
r134 | channelList = range(nx) | |
|
r133 | ||
if x == None: | |||
x = numpy.arange(data1D.size) | |||
|
r135 | ||
|
r138 | if figuretitle == None: | |
self.figuretitle = "" | |||
|
r135 | else: | |
|
r138 | self.figuretitle = figuretitle | |
|
r135 | ||
|
r133 | if not(self.__isDriverOpen): | |
self.__openDriver() | |||
self.__isDriverOpen = True | |||
if not(self.__isConfig): | |||
|
r135 | self.xmin = xmin | |
self.xmax = xmax | |||
self.minvalue = minvalue | |||
self.maxvalue = maxvalue | |||
if self.xmin == None: self.xmin = numpy.min(x) | |||
if self.xmax == None: self.xmax = numpy.max(x) | |||
if self.minvalue == None: self.minvalue = numpy.min(data1D) | |||
if self.maxvalue == None: self.maxvalue = numpy.max(data1D) | |||
|
r133 | ||
|
r135 | self.createFrames() | |
|
r133 | self.__isConfig = True | |
if not(self.__isOutOfXRange(x)): | |||
self.__changeXRange(x) | |||
if self.__isFigureOpen: | |||
|
r135 | self.driverObj.closePage() | |
|
r133 | self.__isFigureOpen = False | |
|
r135 | self.__initFigure() | |
|
r134 | ||
|
r133 | for channel in channelList: | |
frameObj = self.frameObjList[channel] | |||
|
r135 | frameObj.init(xmin=self.xmin, | |
xmax=self.xmax, | |||
ymin=self.minvalue, | |||
ymax=self.maxvalue, | |||
minvalue=self.minvalue, | |||
maxvalue=self.maxvalue) | |||
|
r133 | ||
for channel in channelList: | |||
|
r135 | dataCh = data1D[channel,:] | |
frameObj = self.frameObjList[channel] | |||
# frameObj.clearData() | |||
frameObj.plot(x, dataCh) | |||
# frameObj.refresh() | |||
self.__refresh() | |||
|
r133 | ||
|
r135 | # | |
# if save: | |||
# self.colorplotObj.setFigure(indexPlot) | |||
# path = "/home/roj-idl71/tmp/" | |||
# now = datetime.datetime.now().timetuple() | |||
# file = "spc_img%02d_%03d_%02d%02d%02d.png"%(indexPlot,now[7],now[3],now[4],now[5]) | |||
# filename = os.path.join(path,file) | |||
# self.colorplotObj.savePlot(indexPlot, filename) | |||
# | |||
# self.colorplotObj.closePage() | |||
|
r138 | ||
def plotPcolor(self,data, | |||
x=None, | |||
y=None, | |||
channelList=None, | |||
xmin=None, | |||
xmax=None, | |||
ymin=None, | |||
ymax=None, | |||
minvalue=None, | |||
maxvalue=None, | |||
figuretitle=None, | |||
deltax=None, | |||
save=False, | |||
gpath='./'): | |||
# data, | |||
# currenttime, | |||
# range, | |||
# starttime, | |||
# endtime, | |||
# minrange, | |||
# maxrange, | |||
# minvalue, | |||
# maxvalue, | |||
# figuretitle, | |||
# interval, | |||
# save, | |||
# gpath): | |||
if figuretitle == None: | |||
self.figuretitle = "" | |||
else: | |||
self.figuretitle = figuretitle | |||
if not(self.__isDriverOpen): | |||
self.__openDriver() | |||
self.__isDriverOpen = True | |||
if not(self.__isConfig): | |||
self.setParms(data,x,y,xmin,xmax,ymin,ymax,minvalue,maxvalue,deltax) | |||
# if self.xmin == None: self.xmin = numpy.min(x) | |||
# if self.xmax == None: self.xmax = numpy.max(x) | |||
self.createFrames() | |||
self.__isConfig = True | |||
if not(self.__isOutOfXRange(x)): | |||
self.__changeXRange(x) | |||
if self.__isFigureOpen: | |||
self.driverObj.closePage() | |||
self.__isFigureOpen = False | |||
self.__initFigure() | |||
|
r133 | ||
|
r135 | class Frame: | |
nplots = None | |||
|
r133 | plotObjList = [] | |
title = "" | |||
|
r135 | def __init__(self,drvObj, idframe): | |
self.drvObj = drvObj | |||
|
r133 | self.idframe = idframe | |
|
r135 | self.createPlots() | |
|
r133 | ||
|
r135 | def createPlots(self): | |
raise ValueError, "No implemented" | |||
|
r133 | ||
|
r135 | def getScreenPosMainPlot(self): | |
raise ValueError, "No implemented" | |||
def getScreenPos(self, nplot): | |||
|
r133 | ||
if nplot == 0: | |||
|
r135 | xi, yi, xw, yw = self.getScreenPosMainPlot() | |
|
r133 | return xi, yi, xw, yw | |
|
r135 | ||
def init(self, xmin, xmax, ymin, ymax, minvalue, maxvalue): | |||
|
r133 | for plotObj in self.plotObjList: | |
|
r135 | plotObj.plotBox(xmin, xmax, ymin, ymax, minvalue, maxvalue) | |
# plotObj.setLabels() # ? evaluar si conviene colocarlo dentro del plotbox | |||
|
r133 | ||
|
r135 | def refresh(self): | |
for plotObj in self.plotObjList: | |||
plotObj.refresh() | |||
|
r133 | ||
class Plot: | |||
title = "" | |||
|
r135 | xlabel = "" | |
ylabel = "" | |||
xaxisastime = None | |||
timefmt = None | |||
xopt = "" | |||
yopt = "" | |||
xpos = None | |||
ypos = None | |||
szchar = None | |||
idframe = None | |||
idplot = None | |||
def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw): | |||
self.drvObj = drvObj | |||
self.idframe = idframe | |||
self.idplot = idplot | |||
|
r133 | self.xi = xi | |
self.yi = yi | |||
self.xw = xw | |||
self.yw = yw | |||
|
r135 | # def setLabels(self): | |
# self.drvObj.driver.setPlotLabels(self.xlabel, self.ylabel, self.title) | |||
def plotBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue): | |||
self.xmin = xmin | |||
self.xmax = xmax | |||
self.ymin = ymin | |||
self.ymax = ymax | |||
self.minvalue = minvalue | |||
self.maxvalue = maxvalue | |||
self.drvObj.driver.plotBox(self.idframe, | |||
self.xpos, | |||
self.ypos, | |||
self.xmin, | |||
self.xmax, | |||
self.ymin, | |||
self.ymax, | |||
self.minvalue, | |||
self.maxvalue, | |||
self.xopt, | |||
self.yopt, | |||
self.szchar, | |||
self.xaxisastime, | |||
self.timefmt) | |||
self.drvObj.driver.setPlotLabels(self.xlabel, self.ylabel, self.title) | |||
def plotBasicLine(self,x, y, color): | |||
""" | |||
Inputs: | |||
x: | |||
y: | |||
color: | |||
""" | |||
self.drvObj.driver.basicLine(x, y, self.xmin, self.xmax, self.ymin, self.ymax, color, self.idframe, self.xpos, self.ypos) | |||
|
r133 | ||
|
r135 |