##// 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
BaseGraph.py
1077 lines | 34.6 KiB | text/x-python | PythonLexer
"""
Created on Feb 7, 2012
@autor $Author$
@version $Id$
"""
import os
import numpy
import sys
import time
import datetime
import time
import plplot
def cmap1_init(colormap="gray"):
if colormap == None:
return
ncolor = None
rgb_lvl = None
# Routine for defining a specific color map 1 in HLS space.
# if gray is true, use basic grayscale variation from half-dark to light.
# otherwise use false color variation from blue (240 deg) to red (360 deg).
# Independent variable of control points.
i = numpy.array((0., 1.))
if colormap=="gray":
ncolor = 256
# Hue for control points. Doesn't matter since saturation is zero.
h = numpy.array((0., 0.))
# Lightness ranging from half-dark (for interest) to light.
l = numpy.array((0.5, 1.))
# Gray scale has zero saturation
s = numpy.array((0., 0.))
# number of cmap1 colours is 256 in this case.
plplot.plscmap1n(ncolor)
# Interpolate between control points to set up cmap1.
plplot.plscmap1l(0, i, h, l, s)
return None
if colormap == 'jet':
ncolor = 256
pos = numpy.zeros((ncolor))
r = numpy.zeros((ncolor))
g = numpy.zeros((ncolor))
b = numpy.zeros((ncolor))
for i in range(ncolor):
if(i <= 35.0/100*(ncolor-1)): rf = 0.0
elif (i <= 66.0/100*(ncolor-1)): rf = (100.0/31)*i/(ncolor-1) - 35.0/31
elif (i <= 89.0/100*(ncolor-1)): rf = 1.0
else: rf = (-100.0/22)*i/(ncolor-1) + 111.0/22
if(i <= 12.0/100*(ncolor-1)): gf = 0.0
elif(i <= 38.0/100*(ncolor-1)): gf = (100.0/26)*i/(ncolor-1) - 12.0/26
elif(i <= 64.0/100*(ncolor-1)): gf = 1.0
elif(i <= 91.0/100*(ncolor-1)): gf = (-100.0/27)*i/(ncolor-1) + 91.0/27
else: gf = 0.0
if(i <= 11.0/100*(ncolor-1)): bf = (50.0/11)*i/(ncolor-1) + 0.5
elif(i <= 34.0/100*(ncolor-1)): bf = 1.0
elif(i <= 65.0/100*(ncolor-1)): bf = (-100.0/31)*i/(ncolor-1) + 65.0/31
else: bf = 0
r[i] = rf
g[i] = gf
b[i] = bf
pos[i] = float(i)/float(ncolor-1)
plplot.plscmap1n(ncolor)
plplot.plscmap1l(1, pos, r, g, b)
if colormap=="br_green":
ncolor = 256
# Hue ranges from blue (240 deg) to red (0 or 360 deg)
h = numpy.array((240., 0.))
# Lightness and saturation are constant (values taken from C example).
l = numpy.array((0.6, 0.6))
s = numpy.array((0.8, 0.8))
# number of cmap1 colours is 256 in this case.
plplot.plscmap1n(ncolor)
# Interpolate between control points to set up cmap1.
plplot.plscmap1l(0, i, h, l, s)
return None
if colormap=="tricolor":
ncolor = 3
# Hue ranges from blue (240 deg) to red (0 or 360 deg)
h = numpy.array((240., 0.))
# Lightness and saturation are constant (values taken from C example).
l = numpy.array((0.6, 0.6))
s = numpy.array((0.8, 0.8))
# number of cmap1 colours is 256 in this case.
plplot.plscmap1n(ncolor)
# Interpolate between control points to set up cmap1.
plplot.plscmap1l(0, i, h, l, s)
return None
if colormap == 'rgb' or colormap == 'rgb666':
color_sz = 6
ncolor = color_sz*color_sz*color_sz
pos = numpy.zeros((ncolor))
r = numpy.zeros((ncolor))
g = numpy.zeros((ncolor))
b = numpy.zeros((ncolor))
ind = 0
for ri in range(color_sz):
for gi in range(color_sz):
for bi in range(color_sz):
r[ind] = ri/(color_sz-1.0)
g[ind] = gi/(color_sz-1.0)
b[ind] = bi/(color_sz-1.0)
pos[ind] = ind/(ncolor-1.0)
ind += 1
rgb_lvl = [6,6,6] #Levels for RGB colors
if colormap == 'rgb676':
ncolor = 6*7*6
pos = numpy.zeros((ncolor))
r = numpy.zeros((ncolor))
g = numpy.zeros((ncolor))
b = numpy.zeros((ncolor))
ind = 0
for ri in range(8):
for gi in range(8):
for bi in range(4):
r[ind] = ri/(6-1.0)
g[ind] = gi/(7-1.0)
b[ind] = bi/(6-1.0)
pos[ind] = ind/(ncolor-1.0)
ind += 1
rgb_lvl = [6,7,6] #Levels for RGB colors
if colormap == 'rgb685':
ncolor = 6*8*5
pos = numpy.zeros((ncolor))
r = numpy.zeros((ncolor))
g = numpy.zeros((ncolor))
b = numpy.zeros((ncolor))
ind = 0
for ri in range(8):
for gi in range(8):
for bi in range(4):
r[ind] = ri/(6-1.0)
g[ind] = gi/(8-1.0)
b[ind] = bi/(5-1.0)
pos[ind] = ind/(ncolor-1.0)
ind += 1
rgb_lvl = [6,8,5] #Levels for RGB colors
if colormap == 'rgb884':
ncolor = 8*8*4
pos = numpy.zeros((ncolor))
r = numpy.zeros((ncolor))
g = numpy.zeros((ncolor))
b = numpy.zeros((ncolor))
ind = 0
for ri in range(8):
for gi in range(8):
for bi in range(4):
r[ind] = ri/(8-1.0)
g[ind] = gi/(8-1.0)
b[ind] = bi/(4-1.0)
pos[ind] = ind/(ncolor-1.0)
ind += 1
rgb_lvl = [8,8,4] #Levels for RGB colors
if ncolor == None:
raise ValueError, "The colormap selected is not valid"
plplot.plscmap1n(ncolor)
plplot.plscmap1l(1, pos, r, g, b)
return rgb_lvl
def setColormap(colormap="jet"):
cmap1_init(colormap)
def savePlplot(filename,width,height):
curr_strm = plplot.plgstrm()
save_strm = plplot.plmkstrm()
plplot.plsetopt("geometry", "%dx%d"%(width,height))
plplot.plsdev("png")
plplot.plsfnam(filename)
plplot.plcpstrm(curr_strm,0)
plplot.plreplot()
plplot.plend1()
plplot.plsstrm(curr_strm)
def initPlplot(indexPlot,ncol,nrow,winTitle,width,height):
plplot.plsstrm(indexPlot)
plplot.plparseopts([winTitle],plplot.PL_PARSE_FULL)
plplot.plsetopt("geometry", "%dx%d"%(width*ncol,height*nrow))
plplot.plsdev("xwin")
plplot.plscolbg(255,255,255)
plplot.plscol0(1,0,0,0)
plplot.plinit()
plplot.plspause(False)
plplot.plssub(ncol,nrow)
def setNewPage():
plplot.plbop()
plplot.pladv(0)
def closePage():
plplot.pleop()
def clearData(objGraph):
objGraph.plotBox(objGraph.xrange[0], objGraph.xrange[1], objGraph.yrange[0], objGraph.yrange[1], "bc", "bc")
objGraph.setColor(15) #Setting Line Color to White
if objGraph.datatype == "complex":
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata.real)
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata.imag)
if objGraph.datatype == "real":
objGraph.basicXYPlot(objGraph.xdata,objGraph.ydata)
objGraph.setColor(1) #Setting Line Color to Black
# objGraph.setLineStyle(2)
# objGraph.plotBox(objGraph.xrange[0], objGraph.xrange[1], objGraph.yrange[0], objGraph.yrange[1], "bcntg", "bc")
# objGraph.setLineStyle(1)
def setStrm(indexPlot):
plplot.plsstrm(indexPlot)
def plFlush():
plplot.plflush()
def plShow():
plplot.plspause(True)
plplot.plend()
def setPlTitle(pltitle,color, szchar=0.7):
setSubpages(1, 0)
plplot.pladv(0)
plplot.plvpor(0., 1., 0., 1.)
if color == "black":
plplot.plcol0(1)
if color == "white":
plplot.plcol0(15)
plplot.plschr(0.0,szchar)
plplot.plmtex("t",-1., 0.5, 0.5, pltitle)
def setSubpages(ncol,nrow):
plplot.plssub(ncol,nrow)
class BaseGraph:
__name = None
__xpos = None
__ypos = None
__subplot = None
__xg = None
__yg = None
xdata = None
ydata = None
getGrid = True
xaxisIsTime = False
deltax = None
xmin = None
xmax = None
def __init__(self,name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange=None,deltax=1.0):
self.setName(name)
self.setScreenPos(xpos, ypos)
self.setLabels(xlabel,ylabel,title)
self.setSubPlot(subplot)
self.setSizeOfChar(szchar)
self.setXYZrange(xrange,yrange,zrange)
self.getGrid = True
self.xaxisIsTime = False
self.deltax = deltax
def setXYZrange(self,xrange,yrange,zrange):
self.xrange = xrange
self.yrange = yrange
self.zrange = zrange
def setName(self, name):
self.__name = name
def setScreenPos(self,xpos,ypos):
self.__xpos = xpos
self.__ypos = ypos
def setXYData(self,xdata=None,ydata=None,datatype="real"):
if((xdata != None) and (ydata != None)):
self.xdata = xdata
self.ydata = ydata
self.datatype = datatype
if((self.xdata == None) and (self.ydata == None)):
return None
return 1
def setLabels(self,xlabel=None,ylabel=None,title=None):
if xlabel != None: self.xlabel = xlabel
if ylabel != None: self.ylabel = ylabel
if title != None: self.title = title
def setSubPlot(self,subplot):
self.__subplot = subplot
def setSizeOfChar(self,szchar):
self.__szchar = szchar
def setLineStyle(self,style):
plplot.pllsty(style)
def setColor(self,color):
plplot.plcol0(color)
def setXAxisAsTime(self,value=False):
self.xaxisIsTime = value
def basicLineTimePlot(self, x, y, xmin=None, xmax=None, ymin=None, ymax=None, colline=1):
if xmin == None: xmin = x[0]
if xmax == None: xmax = x[-1]
if ymin == None: ymin = y[0]
if ymax == None: ymax = y[-1]
plplot.plcol0(colline)
plplot.plline(x, y)
plplot.plcol0(1)
def basicXYPlot(self, x, y, xmin=None, xmax=None, ymin=None, ymax=None):
if xmin == None: xmin = x[0]
if xmax == None: xmax = x[-1]
if ymin == None: ymin = y[0]
if ymax == None: ymax = y[-1]
plplot.plline(x, y)
def basicPcolorPlot(self, data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None):
"""
"""
if xmin == None: xmin = x[0]
if xmax == None: xmax = x[-1]
if ymin == None: ymin = y[0]
if ymax == None: ymax = y[-1]
if zmin == None: zmin = numpy.nanmin(data)
if zmax == None: zmax = numpy.nanmax(data)
plplot.plimage(data,
float(x[0]),
float(x[-1]),
float(y[0]),
float(y[-1]),
float(zmin),
float(zmax),
float(xmin),
float(xmax),
float(ymin),
float(ymax)
)
def __getBoxpltr(self, x, y, deltax=None, deltay=None):
if not(len(x)>0 and len(y)>0):
raise ValueError, "x axis and y axis are empty"
if deltax == None: deltax = x[-1] - x[-2]
if deltay == None: deltay = y[-1] - y[-2]
x1 = numpy.append(x, x[-1] + deltax)
y1 = numpy.append(y, y[-1] + deltay)
xg = (numpy.multiply.outer(x1, numpy.ones(len(y1))))
yg = (numpy.multiply.outer(numpy.ones(len(x1)), y1))
self.__xg = xg
self.__yg = yg
return xg, yg
def advPcolorPlot(self, data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=0., zmax=0., deltax=1.0, deltay=None, getGrid = True):
if getGrid:
xg, yg = self.__getBoxpltr(x, y, deltax, deltay)
else:
xg = self.__xg
yg = self.__yg
plplot.plimagefr(data,
float(xmin),
float(xmax),
float(ymin),
float(ymax),
0.,
0.,
float(zmin),
float(zmax),
plplot.pltr2,
xg,
yg)
def colorbarPlot(self, xmin=0., xmax=1., ymin=0., ymax=1.):
data = numpy.arange(256)
data = numpy.reshape(data, (1,-1))
plplot.plimage(data,
float(xmin),
float(xmax),
float(ymin),
float(ymax),
0.,
255.,
float(xmin),
float(xmax),
float(ymin),
float(ymax))
def plotBox(self, xmin, xmax, ymin, ymax, xopt, yopt, nolabels=False):
plplot.plschr(0.0,self.__szchar-0.05)
plplot.pladv(self.__subplot)
plplot.plvpor(self.__xpos[0], self.__xpos[1], self.__ypos[0], self.__ypos[1])
plplot.plwind(float(xmin), # self.xrange[0]
float(xmax), # self.xrange[1]
float(ymin), # self.yrange[0]
float(ymax) # self.yrange[1]
)
if self.xaxisIsTime:
plplot.pltimefmt("%H:%M")
timedelta = (xmax - xmin + 1)/8.
plplot.plbox(xopt, timedelta, 3, yopt, 0.0, 0)
else:
plplot.plbox(xopt, 0.0, 0, yopt, 0.0, 0)
if not(nolabels):
plplot.pllab(self.xlabel, self.ylabel, self.title)
def delLabels(self):
self.setColor(15) #Setting Line Color to White
plplot.pllab(self.xlabel, self.ylabel, self.title)
self.setColor(1) #Setting Line Color to Black
def plotImage(self,x,y,z,xrange,yrange,zrange):
xi = x[0]
xf = x[-1]
yi = y[0]
yf = y[-1]
plplot.plimage(z,
float(xi),
float(xf),
float(yi),
float(yf),
float(zrange[0]),
float(zrange[1]),
float(xi),
float(xf),
float(yrange[0]),
yrange[1])
class LinearPlot:
linearObjDic = {}
__xpos = None
__ypos = None
def __init__(self,indexPlot,nsubplot,winTitle):
self.width = 700
self.height = 150
ncol = 1
nrow = nsubplot
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
def setFigure(self,indexPlot):
setStrm(indexPlot)
def setPosition(self):
xi = 0.07; xf = 0.9 #0.8,0.7,0.5
yi = 0.15; yf = 0.8
xpos = [xi,xf]
ypos = [yi,yf]
self.__xpos = xpos
self.__ypos = ypos
return xpos,ypos
def show(self):
plShow()
def refresh(self):
plFlush()
def setup(self,subplot,xmin,xmax,ymin,ymax,title,xlabel,ylabel):
szchar = 1.10
name = "linear"
key = name + "%d"%subplot
xrange = [xmin,xmax]
yrange = [ymin,ymax]
xpos,ypos = self.setPosition()
linearObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange)
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcnst", "bcnstv")
self.linearObjDic[key] = linearObj
def plot(self,subplot,x,y,type="power"):
name = "linear"
key = name + "%d"%subplot
linearObj = self.linearObjDic[key]
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcst", "bcst")
if linearObj.setXYData() != None:
clearData(linearObj)
else:
if type.lower() == 'simple':
linearObj.setXYData(x,y,"real")
if type.lower() == 'power':
linearObj.setXYData(x,abs(y),"real")
if type.lower() == 'iq':
linearObj.setXYData(x,y,"complex")
if type.lower() == 'simple':
colline = 9
linearObj.basicLineTimePlot(x, y, xmin, xmax, ymin, ymax, colline)
linearObj.setXYData(x,y,"real")
if type.lower() == 'power':
colline = 9
linearObj.basicLineTimePlot(x, abs(y), xmin, xmax, ymin, ymax, colline)
linearObj.setXYData(x,abs(y),"real")
if type.lower() == 'iq':
colline = 9
linearObj.basicLineTimePlot(x=x, y=y.real, colline=colline)
colline = 13
linearObj.basicLineTimePlot(x=x, y=y.imag, colline=colline)
linearObj.setXYData(x,y,"complex")
linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bcst", "bcst")
# linearObj.plotBox(linearObj.xrange[0], linearObj.xrange[1], linearObj.yrange[0], linearObj.yrange[1], "bc", "bc")
# linearObj.basicXYPlot(data,y)
# linearObj.setXYData(data,y)
class PcolorPlot:
pcolorObjDic = {}
colorbarObjDic = {}
pwprofileObjDic = {}
showColorbar = None
showPowerProfile = None
XAxisAsTime = None
width = None
height = None
__spcxpos = None
__spcypos = None
__cmapxpos = None
__cmapypos = None
__profxpos = None
__profypos = None
__lastTitle = None
def __init__(self,indexPlot,nsubplot,winTitle,colormap,showColorbar,showPowerProfile,XAxisAsTime):
self.width = 460
self.height = 300
self.showColorbar = showColorbar
self.showPowerProfile = showPowerProfile
self.XAxisAsTime = XAxisAsTime
ncol = int(numpy.sqrt(nsubplot)+0.9)
nrow = int(nsubplot*1./ncol + 0.9)
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
setColormap(colormap)
self.ncol = ncol
self.nrow = nrow
def setFigure(self,indexPlot):
setStrm(indexPlot)
def setSpectraPos(self): #modificar valores de acuerdo al colorbar y pwprofile
if self.showPowerProfile: xi = 0.09; xf = 0.6 #0.075
else: xi = 0.15; xf = 0.8 #0.8,0.7,0.5
yi = 0.15; yf = 0.80
xpos = [xi,xf]
ypos = [yi,yf]
self.__spcxpos = xpos
self.__spcypos = ypos
return xpos,ypos
def setColorbarScreenPos(self):
xi = self.__spcxpos[1] + 0.03; xf = xi + 0.03
yi = self.__spcypos[0]; yf = self.__spcypos[1]
xpos = [xi,xf]
ypos = [yi,yf]
self.__cmapxpos = xpos
self.__cmapypos = ypos
return xpos,ypos
def setPowerprofileScreenPos(self):
xi = self.__cmapxpos[1] + 0.07; xf = xi + 0.25
yi = self.__spcypos[0]; yf = self.__spcypos[1]
xpos = [xi,xf]
ypos = [yi,yf]
self.__profxpos = [xi,xf]
self.__profypos = [yi,yf]
return xpos,ypos
def createObjects(self,subplot,xmin,xmax,ymin,ymax,zmin,zmax,title,xlabel,ylabel):
"""
Crea los objetos necesarios para un subplot
"""
# Config Spectra plot
szchar = 0.7
name = "spc"
key = name + "%d"%subplot
xrange = [xmin,xmax]
yrange = [ymin,ymax]
zrange = [zmin,zmax]
xpos,ypos = self.setSpectraPos()
pcolorObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange)
self.pcolorObjDic[key] = pcolorObj
# Config Colorbar
if self.showColorbar:
szchar = 0.65
name = "colorbar"
key = name + "%d"%subplot
xpos,ypos = self.setColorbarScreenPos()
xrange = [0.,1.]
yrange = [zmin,zmax]
cmapObj = BaseGraph(name,subplot,xpos,ypos,"","","dB",szchar,xrange,yrange)
self.colorbarObjDic[key] = cmapObj
# Config Power profile
if self.showPowerProfile:
szchar = 0.55
name = "pwprofile"
key = name + "%d"%subplot
xpos,ypos = self.setPowerprofileScreenPos()
xrange = [zmin,zmax]
yrange = [ymin,ymax]
powObj = BaseGraph(name,subplot,xpos,ypos,"dB","","Power Profile",szchar,xrange,yrange)
self.pwprofileObjDic[key] = powObj
def setNewPage(self, pltitle='No title'):
szchar = 0.7
setNewPage()
setPlTitle(pltitle,"black", szchar=szchar)
setSubpages(self.ncol, self.nrow)
def closePage(self):
closePage()
def iniPlot(self,subplot):
"""
Inicializa los subplots con su frame, titulo, etc
"""
# Config Spectra plot
name = "spc"
key = name + "%d"%subplot
pcolorObj = self.pcolorObjDic[key]
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcnst", "bcnstv")
# Config Colorbar
if self.showColorbar:
name = "colorbar"
key = name + "%d"%subplot
cmapObj = self.colorbarObjDic[key]
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcmtsv")
cmapObj.colorbarPlot(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1])
# cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcmtsv")
# Config Power profile
if self.showPowerProfile:
name = "pwprofile"
key = name + "%d"%subplot
powObj = self.pwprofileObjDic[key]
powObj.setLineStyle(2)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
powObj.setLineStyle(1)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
def printTitle(self,pltitle):
# if self.__lastTitle != None:
# setPlTitle(self.__lastTitle,"white")
#
# self.__lastTitle = pltitle
setPlTitle(pltitle,"black")
# setSubpages(self.ncol,self.nrow)
def plot(self,subplot,x,y,z,subtitle):
# Spectra plot
name = "spc"
key = name + "%d"%subplot
# newx = [x[0],x[-1]]
pcolorObj = self.pcolorObjDic[key]
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcst", "bcst")
#pcolorObj.delLabels()
pcolorObj.setLabels(title=subtitle)
deltax = None; deltay = None
pcolorObj.advPcolorPlot(z,
x,
y,
xmin=pcolorObj.xrange[0],
xmax=pcolorObj.xrange[1],
ymin=pcolorObj.yrange[0],
ymax=pcolorObj.yrange[1],
zmin=pcolorObj.zrange[0],
zmax=pcolorObj.zrange[1],
deltax=deltax,
deltay=deltay,
getGrid=pcolorObj.getGrid)
#Solo se calcula la primera vez que se ingresa a la funcion
pcolorObj.getGrid = False
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], "bcst", "bcst", nolabels=True)
# Power Profile
if self.showPowerProfile:
power = numpy.average(z, axis=0)
name = "pwprofile"
key = name + "%d"%subplot
powObj = self.pwprofileObjDic[key]
if powObj.setXYData() != None:
#clearData(powObj)
powObj.setLineStyle(2)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
powObj.setLineStyle(1)
else:
powObj.setXYData(power,y)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
powObj.basicXYPlot(power,y)
powObj.setXYData(power,y)
def savePlot(self,indexPlot,filename):
width = self.width*self.ncol
hei = self.height*self.nrow
savePlplot(filename,width,hei)
def refresh(self):
plFlush()
class RtiPlot:
pcolorObjDic = {}
colorbarObjDic = {}
pwprofileObjDic = {}
showColorbar = None
showPowerProfile = None
XAxisAsTime = None
widht = None
height = None
__rtixpos = None
__rtiypos = None
__cmapxpos = None
__cmapypos = None
__profxpos = None
__profypos = None
def __init__(self,indexPlot,nsubplot,winTitle,colormap,showColorbar,showPowerProfile,XAxisAsTime):
self.width = 700
self.height = 150
self.showColorbar = showColorbar
self.showPowerProfile = showPowerProfile
self.XAxisAsTime = XAxisAsTime
ncol = 1
nrow = nsubplot
initPlplot(indexPlot,ncol,nrow,winTitle,self.width,self.height)
setColormap(colormap)
self.ncol = ncol
self.nrow = nrow
def setFigure(self,indexPlot):
setStrm(indexPlot)
def setRtiScreenPos(self):
if self.showPowerProfile: xi = 0.07; xf = 0.65
else: xi = 0.07; xf = 0.9
yi = 0.15; yf = 0.80
xpos = [xi,xf]
ypos = [yi,yf]
self.__rtixpos = xpos
self.__rtiypos = ypos
return xpos,ypos
def setColorbarScreenPos(self):
xi = self.__rtixpos[1] + 0.03; xf = xi + 0.03
yi = self.__rtiypos[0]; yf = self.__rtiypos[1]
xpos = [xi,xf]
ypos = [yi,yf]
self.__cmapxpos = xpos
self.__cmapypos = ypos
return xpos,ypos
def setPowerprofileScreenPos(self):
xi = self.__cmapxpos[1] + 0.05; xf = xi + 0.20
yi = self.__rtiypos[0]; yf = self.__rtiypos[1]
xpos = [xi,xf]
ypos = [yi,yf]
self.__profxpos = [xi,xf]
self.__profypos = [yi,yf]
return xpos,ypos
def setup(self,subplot,xmin,xmax,ymin,ymax,zmin,zmax,title,xlabel,ylabel,timedata,timezone="lt",npoints=100):
# Config Rti plot
szchar = 1.10
name = "rti"
key = name + "%d"%subplot
# xmin, xmax --> minHour, max Hour : valores que definen el ejex x=[horaInicio,horaFinal]
thisDateTime = datetime.datetime.fromtimestamp(timedata)
startDateTime = datetime.datetime(thisDateTime.year,thisDateTime.month,thisDateTime.day,xmin,0,0)
endDateTime = datetime.datetime(thisDateTime.year,thisDateTime.month,thisDateTime.day,xmax,59,59)
deltaTime = 0
if timezone == "lt":
deltaTime = time.timezone
startTimeInSecs = time.mktime(startDateTime.timetuple()) - deltaTime
endTimeInSecs = time.mktime(endDateTime.timetuple()) - deltaTime
xrange = [startTimeInSecs,endTimeInSecs]
totalTimeInXrange = endTimeInSecs - startTimeInSecs + 1.
deltax = totalTimeInXrange / npoints
yrange = [ymin,ymax]
zrange = [zmin,zmax]
xpos,ypos = self.setRtiScreenPos()
pcolorObj = BaseGraph(name,subplot,xpos,ypos,xlabel,ylabel,title,szchar,xrange,yrange,zrange,deltax)
if self.XAxisAsTime:
pcolorObj.setXAxisAsTime(self.XAxisAsTime)
xopt = "bcnstd"
yopt = "bcnstv"
else:
xopt = "bcnst"
yopt = "bcnstv"
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], xopt, yopt)
self.pcolorObjDic[key] = pcolorObj
# Config Colorbar
if self.showColorbar:
szchar = 0.9
name = "colorbar"
key = name + "%d"%subplot
xpos,ypos = self.setColorbarScreenPos()
xrange = [0.,1.]
yrange = [zmin,zmax]
cmapObj = BaseGraph(name,subplot,xpos,ypos,"","","dB",szchar,xrange,yrange)
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcm")
cmapObj.colorbarPlot(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1])
cmapObj.plotBox(cmapObj.xrange[0], cmapObj.xrange[1], cmapObj.yrange[0], cmapObj.yrange[1], "bc", "bcmtsv")
self.colorbarObjDic[key] = cmapObj
# Config Power profile
if self.showPowerProfile:
szchar = 0.8
name = "pwprofile"
key = name + "%d"%subplot
xpos,ypos = self.setPowerprofileScreenPos()
xrange = [zmin,zmax]
yrange = [ymin,ymax]
powObj = BaseGraph(name,subplot,xpos,ypos,"dB","","Power Profile",szchar,xrange,yrange)
powObj.setLineStyle(2)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
powObj.setLineStyle(1)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
self.pwprofileObjDic[key] = powObj
def plot(self,subplot,x,y,z):
# RTI plot
name = "rti"
key = name + "%d"%subplot
data = numpy.reshape(z, (1,-1))
data = numpy.abs(data)
data = 10*numpy.log10(data)
newx = [x,x+1]
pcolorObj = self.pcolorObjDic[key]
if pcolorObj.xaxisIsTime:
xopt = "bcstd"
yopt = "bcst"
else:
xopt = "bcst"
yopt = "bcst"
pcolorObj.plotBox(pcolorObj.xrange[0], pcolorObj.xrange[1], pcolorObj.yrange[0], pcolorObj.yrange[1], xopt, yopt)
deltax = pcolorObj.deltax
deltay = None
if pcolorObj.xmin == None and pcolorObj.xmax == None:
pcolorObj.xmin = x
pcolorObj.xmax = x
if x >= pcolorObj.xmax:
xmin = x
xmax = x + deltax
x = [x]
pcolorObj.advPcolorPlot(data,
x,
y,
xmin=xmin,
xmax=xmax,
ymin=pcolorObj.yrange[0],
ymax=pcolorObj.yrange[1],
zmin=pcolorObj.zrange[0],
zmax=pcolorObj.zrange[1],
deltax=deltax,
deltay=deltay,
getGrid=pcolorObj.getGrid)
pcolorObj.xmin = xmin
pcolorObj.xmax = xmax
# Power Profile
if self.showPowerProfile:
data = numpy.reshape(data,(numpy.size(data)))
name = "pwprofile"
key = name + "%d"%subplot
powObj = self.pwprofileObjDic[key]
if powObj.setXYData() != None:
clearData(powObj)
powObj.setLineStyle(2)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bcntg", "bc")
powObj.setLineStyle(1)
else:
powObj.setXYData(data,y)
powObj.plotBox(powObj.xrange[0], powObj.xrange[1], powObj.yrange[0], powObj.yrange[1], "bc", "bc")
powObj.basicXYPlot(data,y)
powObj.setXYData(data,y)
def savePlot(self,indexPlot,filename):
width = self.width*self.ncol
hei = self.height*self.nrow
savePlplot(filename,width,hei)
def refresh(self):
plFlush()
if __name__ == '__main__':
#Setting the signal
fs = 8000
f0 = 200
f1 = 400
T = 1./fs
x = numpy.arange(160)
y1 = numpy.sin(2*numpy.pi*f0*x*T)
y2 = numpy.sin(2*numpy.pi*f1*x*T)
signalList = [y1,y2]
xmin = numpy.min(x)
xmax = numpy.max(x)
ymin = numpy.min(y1)
ymax = numpy.max(y1)
# Creating Object
indexPlot = 1
nsubplot = 2
winTitle = "mi grafico v1"
subplotTitle = "subplot - No."
xlabel = ""
ylabel = ""
linearObj = LinearPlot(indexPlot,nsubplot,winTitle)
#Config SubPlots
for subplot in range(nsubplot):
indexplot = subplot + 1
title = subplotTitle + '%d'%indexplot
linearObj.setup(indexplot, xmin, xmax, ymin, ymax, title, xlabel, ylabel)
#Plotting
type = "simple"
for subplot in range(nsubplot):
indexplot = subplot + 1
y = signalList[subplot]
linearObj.plot(indexplot, x, y, type)
linearObj.refresh()
linearObj.show()
print "end"