##// END OF EJS Templates
Se modifica el metodo LinearPlot para ploteo interactivo. Se adaptó el ejemplo 1. Se plotean dos graficos, el primero es el de una señal senoidal con ruido aleatorio, el segundo grafico es del tipo pcolor.
Se modifica el metodo LinearPlot para ploteo interactivo. Se adaptó el ejemplo 1. Se plotean dos graficos, el primero es el de una señal senoidal con ruido aleatorio, el segundo grafico es del tipo pcolor.

File last commit:

r161:4c3983336b46
r167:87539073aeee
Show More
schainPlotTypes.py
699 lines | 19.3 KiB | text/x-python | PythonLexer
import numpy
import datetime
import time
from schainPlot import *
class CrossSpc(Figure):
overplot = 0
xw = 900
yw = 650
showprofile = False
signalA = None
signalB = None
coherence = None
phase = None
def __init__(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile):
Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar)
self.showprofile = showprofile
self.signalA = None
self.signalB = None
self.coherence = None
self.phase = None
def getSubplots(self):
nrows = self.nframes
ncolumns = 1
return nrows, ncolumns
def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args):
if xmin == None: xmin = numpy.min(x)
if xmax == None: xmax = numpy.max(x)
if ymin == None: ymin = numpy.min(y)
if ymax == None: ymax = numpy.max(y)
if minvalue == None: minvalue = 20.
if maxvalue == None: maxvalue = 90.
self.signalA = self.data[0]
self.signalB = self.data[1]
self.coherence = self.data[2]
self.phase = self.data[3]
self.xmin = xmin
self.xmax = xmax
self.minrange = ymin
self.maxrange = ymax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
def changeXRange(self, *args):
pass
def createFrames(self):
self.frameObjList = []
for frame in range(self.nframes):
frameObj = CrossSpcFrame(self.drvObj,frame + 1, self.colorbar, self.showprofile)
self.frameObjList.append(frameObj)
class CrossSpcFrame(Frame):
xi = None
xw = None
yi = None
yw = None
alpha = None
def __init__(self):
self.drvObj = drvObj
self.idframe = idframe
self.nplots = 4
if showprofile:
self.nplots += 4
self.colorbar = colorbar
self.showprofile = showprofile
self.xi = 0.
self.xw = 0.
self.yi = 0.
self.yw = 0.
self.alpha = 1.
self.createPlots()
def createPlots(self):
plotObjList = []
idplot = 0
counter_plot = 0
for i in range(self.nplots):
xi, yi, xw, yw = self.getScreenPos(idplot)
plotObj = SpcPlot(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, self.colorbar)
plotObjList.append(plotObj)
if self.showprofile:
xi, yi, xw, yw = self.getScreenPosGraph1(idplot)
type = "pwbox"
title = ""
xlabel = "dB"
ylabel = ""
idplot += 1
plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel)
plotObjList.append(plotObj)
idplot += 1
self.plotObjList = plotObjList
# def getScreenPos(self,idplot):
# pass
def getScreenPos(self, diplot):
xi = self.xi
xw = self.xw
if self.showprofile:
width = 0.55
xw += width
self.xi = 0.15 + idplot*self.alpha
if self.showprofile:
width = 0.55
self.xw += width
else:
width = 0.65
self.xw += width
if self.colorbar:
self.xw = self.xw - 0.06
self.alpha = self.xw
yi = 0.20; yw = 0.75
return xi, yi, xw, yw
def getScreenPosGraph1(self):
if self.colorbar:
xi = self.xw + 0.08
else:
xi = self.xw + 0.05
xw = xi + 0.2
self.alpha = xw
if self.colorbar:
self.xi = 0.65 + 0.08
else:
self.xi = 0.75 + 0.05
xw = xi + 0.2
yi = 0.2; yw = 0.75
return xi, yi, xw, yw
def plot(self,x, y, data):
plotObj = self.plotObjList[0]
plotObj.plot(x,y,data)
if self.showprofile:
plotObj = self.plotObjList[1]
avg_data = numpy.average(data, axis=0)
plotObj.plot(avg_data,y)
class SpcFigure(Figure):
overplot = 0
xw = 900
yw = 650
showprofile = False
def __init__(self, idfigure, nframes, wintitle, driver, colormap, colorbar, showprofile):
Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar)
self.showprofile = showprofile
def getSubplots(self):
ncolumns = int(numpy.sqrt(self.nframes)+0.9)
nrows = int(self.nframes*1./ncolumns + 0.9)
return nrows, ncolumns
def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args):
if xmin == None: xmin = numpy.min(x)
if xmax == None: xmax = numpy.max(x)
if ymin == None: ymin = numpy.min(y)
if ymax == None: ymax = numpy.max(y)
if minvalue == None: minvalue = 20.
if maxvalue == None: maxvalue = 90.
self.xmin = xmin
self.xmax = xmax
self.minrange = ymin
self.maxrange = ymax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
def changeXRange(self, *args):
pass
def createFrames(self):
self.frameObjList = []
for frame in range(self.nframes):
frameObj = SpcFrame(self.drvObj,frame + 1, self.colorbar, self.showprofile)
self.frameObjList.append(frameObj)
class SpcFrame(Frame):
def __init__(self,drvObj,idframe,colorbar,showprofile):
self.drvObj = drvObj
self.idframe = idframe
self.nplots = 1
if showprofile:
self.nplots += 1
self.colorbar = colorbar
self.showprofile = showprofile
self.createPlots()
def createPlots(self):
plotObjList = []
idplot = 0
xi, yi, xw, yw = self.getScreenPos(idplot)
plotObj = SpcPlot(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, self.colorbar)
plotObjList.append(plotObj)
if self.showprofile:
idplot = 1
xi, yi, xw, yw = self.getScreenPos(idplot)
type = "pwbox"
title = ""
xlabel = "dB"
ylabel = ""
szchar = 0.70
plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, szchar)
plotObjList.append(plotObj)
self.plotObjList = plotObjList
def getScreenPosMainPlot(self):
xi = 0.10
if self.showprofile:
xw = 0.62
else:
xw = 0.9
if self.colorbar:
xw = xw - 0.06
yi = 0.1; yw = 0.87
return xi, yi, xw, yw
def getScreenPosGraph1(self):
if self.colorbar:
xi = 0.65 + 0.08
else:
xi = 0.75 + 0.05
xw = xi + 0.2
yi = 0.1; yw = 0.87
return xi, yi, xw, yw
def plot(self,x, y, data):
plotObj = self.plotObjList[0]
plotObj.plot(x,y,data)
if self.showprofile:
plotObj = self.plotObjList[1]
avg_data = numpy.average(data, axis=0)
plotObj.plot(avg_data,y)
class SpcPlot(Plot):
getGrid = True
def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw, colorbar):
self.drvObj = drvObj
self.idframe = idframe
self.idplot = idplot
self.xi = xi
self.yi = yi
self.xw = xw
self.yw = yw
self.colorbar = colorbar
if self.colorbar:
cbxi = xw + 0.03
cbxw = cbxi + 0.03
cbyi = yi
cbyw = yw
self.cbxpos = [cbxi,cbxw]
self.cbypos = [cbyi,cbyw]
self.xpos = [self.xi,self.xw]
self.ypos = [self.yi,self.yw]
self.xaxisastime = False
self.timefmt = None
self.xopt = "bcnst"
self.yopt = "bcnstv"
self.szchar = 0.7
self.strforchannel = "Channel %d"%self.idframe
self.xlabel = "m/s"
self.ylabel = "Range (Km)"
def setBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args):
self.xmin = xmin
self.xmax = xmax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
self.colorbar = args[2]
self.title = "%s - %s"%(self.strforchannel,args[3])
def plot(self, x, y, data):
z = data
deltax = None
deltay = None
self.plotPcolor(x, y, z, deltax, deltay, self.getGrid)
self.getGrid = False
class RTIFigure(Figure):
overplot = 1
xw = 700
yw = 650
showprofile = False
starttime = None
endtime = None
minrange = None
maxrange = None
minvalue = None
maxvalue = None
xrangestepinsecs = None
timefmt=None
def __init__(self, idfigure, nframes, wintitle, driver, colormap="br_green", colorbar= True, showprofile=False):
Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar)
self.showprofile = showprofile
def getSubplots(self):
nrows = self.nframes
ncolumns = 1
return nrows, ncolumns
def setParms(self, data, x, y, xmin, xmax, ymin, ymax, minvalue, maxvalue, xrangestep, deltax):
self.starttime = xmin
self.endtime = xmax
cdatetime = datetime.datetime.utcfromtimestamp(x)
mindatetime = datetime.datetime(cdatetime.year,cdatetime.month,cdatetime.day,self.starttime.hour,self.starttime.minute,self.starttime.second)
maxdatetime = mindatetime + datetime.timedelta(seconds=xrangestep)
self.xrangestepinsecs = xrangestep
xmin = time.mktime(mindatetime.timetuple())
xmax = time.mktime(maxdatetime.timetuple())
if self.xrangestepinsecs<=60.:
self.timefmt="%H:%M:%S"
if self.xrangestepinsecs>0. and self.xrangestepinsecs<=1200.:
self.timefmt="%H:%M:%S"
if self.xrangestepinsecs>1200. and self.xrangestepinsecs<=86400.:
self.timefmt="%H:%M"
if self.xrangestepinsecs>86400.:
self.timefmt="%y:%m:%d:%H"
if ymin == None: ymin = numpy.min(y)
if ymax == None: ymax = numpy.max(y)
if minvalue == None: minvalue = 0.
if maxvalue == None: maxvalue = 50.
self.xmin = xmin
self.xmax = xmax
self.minrange = ymin
self.maxrange = ymax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
self.xrangestep = xrangestep
self.deltax = deltax
def changeXRange(self,x):
cdatetime = datetime.datetime.utcfromtimestamp(x)
if ((cdatetime.time()>=self.starttime) and (cdatetime.time()<self.endtime)):
mindatetime = datetime.datetime(cdatetime.year,cdatetime.month,cdatetime.day,cdatetime.hour,cdatetime.minute,cdatetime.second)
self.xmin = time.mktime(mindatetime.timetuple()) - time.timezone
self.xmax = self.xmin + self.xrangestepinsecs
self.figuretitle = "%s %s : %s"%(self.figuretitle,
datetime.datetime.utcfromtimestamp(self.xmin).strftime("%d-%b-%Y %H:%M:%S"),
datetime.datetime.utcfromtimestamp(self.xmax).strftime("%d-%b-%Y %H:%M:%S"))
return 1
return 0
def createFrames(self):
self.frameObjList = []
for frame in range(self.nframes):
frameObj = RTIFrame(self.drvObj,frame + 1, self.colorbar, self.showprofile, self.timefmt)
self.frameObjList.append(frameObj)
class RTIFrame(Frame):
def __init__(self,drvObj,idframe,colorbar,showprofile, timefmt):
self.drvObj = drvObj
self.idframe = idframe
self.nplots = 1
if showprofile:
self.nplots += 1
self.colorbar = colorbar
self.showprofile = showprofile
self.timefmt = timefmt
self.createPlots()
def createPlots(self):
plotObjList = []
idplot = 0
xi, yi, xw, yw = self.getScreenPos(idplot)
plotObj = RTIPlot(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, self.colorbar, self.timefmt)
plotObjList.append(plotObj)
if self.showprofile:
idplot = 1
xi, yi, xw, yw = self.getScreenPos(idplot)
type = "pwbox"
title = ""
xlabel = "dB"
ylabel = ""
szchar = 0.75
plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, szchar)
plotObjList.append(plotObj)
self.plotObjList = plotObjList
def getScreenPosMainPlot(self):
xi = 0.07
if self.showprofile:
xw = 0.65
else:
xw = 0.9
if self.colorbar:
xw = xw - 0.06
yi = 0.20; yw = 0.75
return xi, yi, xw, yw
def getScreenPosGraph1(self):
if self.colorbar:
xi = 0.65 + 0.08
else:
xi = 0.9 + 0.05
xw = xi + 0.2
yi = 0.2; yw = 0.75
return xi, yi, xw, yw
def plot(self, currenttime, range, data):
plotObj = self.plotObjList[0]
plotObj.plot(currenttime,range,data)
if self.showprofile:
plotObj = self.plotObjList[1]
plotObj.plot(data,range)
class RTIPlot(Plot):
deltax = None
deltay = None
xrange = [None,None]
xminpos = None
xmaxpos = None
xg = None
yg = None
def __init__(self,drvObj, idframe, idplot, xi, yi, xw, yw, colorbar, timefmt):
self.drvObj = drvObj
self.idframe = idframe
self.idplot = idplot
self.xi = xi
self.yi = yi
self.xw = xw
self.yw = yw
self.colorbar = colorbar
if self.colorbar:
cbxi = xw + 0.03
cbxw = cbxi + 0.03
cbyi = yi
cbyw = yw
self.cbxpos = [cbxi,cbxw]
self.cbypos = [cbyi,cbyw]
self.xpos = [self.xi,self.xw]
self.ypos = [self.yi,self.yw]
self.xaxisastime = True
self.timefmt = timefmt
self.xopt = "bcnstd"
self.yopt = "bcnstv"
self.szchar = 1.0
self.title = "Channel %d"%self.idframe
self.xlabel = "Local Time"
self.ylabel = "Range (Km)"
def setBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, deltax=None, deltay=None, colorbar=True, *args):
self.xmin = xmin
self.xmax = xmax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
self.deltax = deltax
self.deltay = deltay
self.colorbar = colorbar
def plot(self, currenttime, range, data):
if self.xmaxpos == None:
self.xmaxpos = currenttime
# if currenttime >= self.xmaxpos:
self.xminpos = currenttime
self.xmaxpos = currenttime + self.deltax
x = [currenttime]
y = range
z = numpy.reshape(data, (1,-1))
getGrid = True
self.plotPcolor(x, y, z, self.deltax, self.deltay, getGrid)
class ScopeFigure(Figure):
overplot = 0
xw = 700
yw = 650
colorbar = None
def __init__(self,idfigure,nframes,wintitle,driver):
colormap = None
colorbar = False
Figure.__init__(self,idfigure, nframes, wintitle, self.xw, self.yw, self.overplot, driver, colormap, colorbar)
def getSubplots(self):
nrows = self.nframes
ncolumns = 1
return nrows, ncolumns
def createFrames(self):
self.frameObjList = []
for frame in range(self.nframes):
frameObj = ScopeFrame(self.drvObj,frame + 1)
self.frameObjList.append(frameObj)
class ScopeFrame(Frame):
xlabel = ""
ylabel = ""
title = ""
szchar = 1.1
def __init__(self,drvObj,idframe):
self.drvObj = drvObj
self.idframe = idframe
self.nplots = 1
self.createPlots()
# Frame.__init__(self, drvObj, idframe)
def getScreenPosMainPlot(self):#cada Frame determina las coordenadas de los plots
xi = 0.08; xw = 0.9
yi = 0.20; yw = 0.75
return xi,yi,xw,yw
def createPlots(self):
plotObjList = []
for idplot in range(self.nplots):
xi, yi, xw, yw = self.getScreenPos(idplot)
type = "scopebox"
title = "Channel %d"%self.idframe
xlabel = "range (Km)"
ylabel = "intensity"
plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, self.szchar)
plotObjList.append(plotObj)
self.plotObjList = plotObjList
def plot(self, x, y, z=None):
for plotObj in self.plotObjList:
plotObj.plot(x, y)
class Plot1D(Plot):
# type, title, xlabel, ylabel
def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw, type, title, xlabel, ylabel, szchar):
self.drvObj = drvObj
self.idframe = idframe
self.idplot = idplot
self.xi = xi
self.yi = yi
self.xw = xw
self.yw = yw
self.xpos = [self.xi,self.xw]
self.ypos = [self.yi,self.yw]
self.xaxisastime = False
self.timefmt = None
self.xopt = "bcnst"
self.yopt = "bcnstv"
self.szchar = szchar
self.type = type
self.title = title
self.xlabel = xlabel
self.ylabel = ylabel
def setBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue, *args):
if self.type == "pwbox":
self.xmin = minvalue
self.xmax = maxvalue
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
self.xopt = "bcnstg"
self.yopt = "bcmstv"
else:
self.xmin = xmin
self.xmax = xmax
self.ymin = ymin
self.ymax = ymax
self.minvalue = minvalue
self.maxvalue = maxvalue
self.colorbar = False
def plot(self,x,y):
if y.dtype == "complex128":
color="blue"
self.plotBasicLine(x, y.real, color)
color="red"
self.plotBasicLine(x, y.imag, color)
else:
color="blue"
self.plotBasicLine(x, y, color)