##// END OF EJS Templates
Se agrega parametro de entrada 'show', por defecto (True) muestra la figuras, caso contrario (False) matplotlib no muestra la figuras
Se agrega parametro de entrada 'show', por defecto (True) muestra la figuras, caso contrario (False) matplotlib no muestra la figuras

File last commit:

r169:661bb8af254a
r342:de907111a31d
Show More
schainPlotLib.py
680 lines | 20.5 KiB | text/x-python | PythonLexer
import plplot
import numpy
import sys
import plplot #condicional
class Driver:
def __init__(self,driver, idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs):
if driver == "plplot":
self.driver = PlplotDriver(idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs)
elif driver == "mpl":
self.driver = MplDriver(idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs)
else:
raise ValueError, "The driver: %s is not defined"%driver
class PlplotDriver:
__isDriverOpen = False
pldriver = None
def __init__(self, idfigure=None, xw, yw, wintitle, overplot, colormap, *showGraphs):
if idfigure == None:
raise ValueError, 'idfigure input must be defined'
self.idfigure = idfigure
self.xw = xw
self.yw = yw
self.wintitle = wintitle
self.overplot = overplot
self.colormap = colormap
self.showGraph1 = showGraphs[0]
self.showGraph2 = showGraphs[1]
def configDriver(self):
"""
previous configuration to open(init) the plplot driver
"""
plplot.plsstrm(self.idfigure)
plplot.plparseopts([self.wintitle],plplot.PL_PARSE_FULL)
plplot.plsetopt("geometry", "%dx%d"%(self.xw, self.yw))
plplot.plscolbg(255,255,255)
plplot.plscol0(1,0,0,0)
def openDriver(self, pldriver=None):
if pldriver == None:
if sys.platform == "linux":
pldriver = "xcairo"
elif sys.platform == "darwin":
pldriver = "xwin"
else:
pldriver = ""
plplot.plsdev(pldriver)
plplot.plinit()
plplot.plspause(False)
self.pldriver = pldriver
def closeDriver(self):
pass
def openPage(self):
plplot.plbop()
plplot.pladv(0)
def closePage(self):
plplot.pleop()
def openFigure(self):
plplot.plbop()
plplot.pladv(0)
def closeFigure(self):
plplot.pleop()
def setSubPlots(self,nrows, ncolumns):
plplot.plssub(nrows, ncolumns)
def setColorMap(self,colormap):
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 setBox(self):
pass
def refreshBox(self):
pass
def save(self):
pass
def show(self):
pass
def colorbarPlot(self):
pass
def linePlot(self):
pass
def pcolorPlot(self):
pass
def setLabels(self):
pass
class MplDriver:
def __init__(self):
pass
def config_driver(idfigure, wintitle, width, height):
plplot.plsstrm(idfigure)
plplot.plparseopts([wintitle],plplot.PL_PARSE_FULL)
plplot.plsetopt("geometry", "%dx%d"%(width,height))
def ini_driver(driver):
if sys.platform == "darwin":
plplot.plsdev("xwin")
if sys.platform == "linux":
plplot.plsdev("xcairo")
plplot.plscolbg(255,255,255)
plplot.plscol0(1,0,0,0)
plplot.plinit()
plplot.plspause(False)
def set_subpages(ncol,nrow):
plplot.plssub(ncol,nrow)
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 set_colormap(colormap="jet"):
cmap1_init(colormap)
def save_figure(filename,width,height):
curr_strm = plplot.plgstrm()
save_strm = plplot.plmkstrm()
plplot.plsetopt("geometry", "%dx%d"%(width,height))
if sys.platform == "darwin":
plplot.plsdev("png")
if sys.platform == "linux":
plplot.plsdev("pngcairo")
plplot.plsfnam(filename)
plplot.plcpstrm(curr_strm,0)
plplot.plreplot()
plplot.plend1()
plplot.plsstrm(curr_strm)
def set_new_figure():
plplot.plbop()
plplot.pladv(0)
def close_figure():
plplot.pleop()
def set_strm(indexPlot):
plplot.plsstrm(indexPlot)
def refresh():
plplot.plflush()
def show():
plplot.plspause(True)
plplot.plend()
def set_title(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 set_line_style(style):
plplot.pllsty(style)
def set_color(color):
plplot.plcol0(color)
def set_labels(xlabel, ylabel, title):
plplot.pllab(xlabel, ylabel, title)
def box(subplot, xpos, ypos, xmin, xmax, ymin, ymax, xopt, yopt, szchar, xaxisastime, timefmt="%H:%M"):
plplot.pladv(subplot)
plplot.plschr(0.0,szchar-0.05)
plplot.plvpor(xpos[0], xpos[1], ypos[0], ypos[1])
plplot.plwind(float(xmin),
float(xmax),
float(ymin),
float(ymax)
)
if xaxisastime:
plplot.pltimefmt(timefmt)
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)
def colorbar(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 basicline_timeplot(x, y,colline=1):
plplot.plcol0(colline)
plplot.plline(x, y)
plplot.plcol0(1)
def basic_xy_plot(x, y):
plplot.plline(x, y)
def basic_pcolor_plot(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 image_plot(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])
def adv_pcolor_plot(data, x, y, xg, yg, xmin=None, xmax=None, ymin=None, ymax=None, zmin=0., zmax=0.):
plplot.plimagefr(data,
float(xmin),
float(xmax),
float(ymin),
float(ymax),
0.,
0.,
float(zmin),
float(zmax),
plplot.pltr2,
xg,
yg)
#------------------------------------
#def get_grid(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(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)