##// END OF EJS Templates
Optimizacion de graficos con buffer, el buffer se crea en la clase Axes del modulo figure.py, se agrega el metodo pcolorbuffer....
Optimizacion de graficos con buffer, el buffer se crea en la clase Axes del modulo figure.py, se agrega el metodo pcolorbuffer. En mpldriver.py se agrega el metodo addpcolorbuffer donde se limpia el buffer de matplotlib que genera pcolormesh Estas modificaciones se aplican a los graficos RTI y Mapa de Coherencias.

File last commit:

r169:661bb8af254a
r318:2312df9eac7d
Show More
schainPlot.py
270 lines | 6.8 KiB | text/x-python | PythonLexer
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, ""