|
|
import numpy
|
|
|
import plplot
|
|
|
|
|
|
def cmap1_init(colormap="gray"):
|
|
|
|
|
|
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=="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
|
|
|
|
|
|
class BasicGraph:
|
|
|
"""
|
|
|
|
|
|
"""
|
|
|
|
|
|
hasRange = False
|
|
|
|
|
|
xrange = None
|
|
|
yrange = None
|
|
|
zrange = None
|
|
|
|
|
|
xlabel = None
|
|
|
ylabel = None
|
|
|
title = None
|
|
|
|
|
|
legends = None
|
|
|
|
|
|
__name = None
|
|
|
__subpage = None
|
|
|
__szchar = None
|
|
|
|
|
|
__colormap = None
|
|
|
__colbox = None
|
|
|
__colleg = None
|
|
|
|
|
|
__xpos = None
|
|
|
__ypos = None
|
|
|
|
|
|
__xopt = None #"bcnst"
|
|
|
__yopt = None #"bcnstv"
|
|
|
|
|
|
__xlpos = None
|
|
|
__ylpos = None
|
|
|
|
|
|
__xrangeIsTime = None
|
|
|
|
|
|
#Advanced
|
|
|
__xg = None
|
|
|
__yg = None
|
|
|
|
|
|
def __init__(self):
|
|
|
"""
|
|
|
|
|
|
"""
|
|
|
pass
|
|
|
|
|
|
def hasNotXrange(self):
|
|
|
|
|
|
if self.xrange == None:
|
|
|
return 1
|
|
|
|
|
|
return 0
|
|
|
|
|
|
def hasNotYrange(self):
|
|
|
|
|
|
if self.yrange == None:
|
|
|
return 1
|
|
|
|
|
|
return 0
|
|
|
|
|
|
def hasNotZrange(self):
|
|
|
|
|
|
if self.zrange == None:
|
|
|
return 1
|
|
|
|
|
|
return 0
|
|
|
def setName(self, name):
|
|
|
self.__name = name
|
|
|
|
|
|
def setScreenPos(self, xpos, ypos):
|
|
|
self.__xpos = xpos
|
|
|
self.__ypos = ypos
|
|
|
|
|
|
def setScreenPosbyWidth(self, xoff, yoff, xw, yw):
|
|
|
self.__xpos = [xoff, xoff + xw]
|
|
|
self.__ypos = [yoff, yoff + yw]
|
|
|
|
|
|
def setSubpage(self, subpage):
|
|
|
self.__subpage = subpage
|
|
|
|
|
|
def setSzchar(self, szchar):
|
|
|
self.__szchar = szchar
|
|
|
|
|
|
def setOpt(self, xopt, yopt):
|
|
|
self.__xopt = xopt
|
|
|
self.__yopt = yopt
|
|
|
|
|
|
def setRanges(self, xrange, yrange, zrange=None):
|
|
|
"""
|
|
|
"""
|
|
|
self.xrange = xrange
|
|
|
|
|
|
self.yrange = yrange
|
|
|
|
|
|
if zrange != None:
|
|
|
self.zrange = zrange
|
|
|
|
|
|
def setColormap(self, colormap=None):
|
|
|
|
|
|
if colormap == None:
|
|
|
colormap = self.__colormap
|
|
|
|
|
|
cmap1_init(colormap)
|
|
|
|
|
|
def plotBox(self):
|
|
|
"""
|
|
|
|
|
|
"""
|
|
|
plplot.plvpor(self.__xpos[0], self.__xpos[1], self.__ypos[0], self.__ypos[1])
|
|
|
plplot.plwind(self.xrange[0], self.xrange[1], self.yrange[0], self.yrange[1])
|
|
|
plplot.plbox(self.__xopt, 0.0, 0, self.__yopt, 0.0, 0)
|
|
|
plplot.pllab(self.xlabel, self.ylabel, self.title)
|
|
|
|
|
|
def setup(self, title=None, xlabel=None, ylabel=None, colormap=None):
|
|
|
"""
|
|
|
"""
|
|
|
self.title = title
|
|
|
self.xlabel = xlabel
|
|
|
self.ylabel = ylabel
|
|
|
self.__colormap = colormap
|
|
|
|
|
|
def initSubpage(self):
|
|
|
|
|
|
if plplot.plgdev() == '':
|
|
|
raise ValueError, "Plot device has not been initialize"
|
|
|
|
|
|
plplot.pladv(self.__subpage)
|
|
|
plplot.plschr(0.0, self.__szchar)
|
|
|
|
|
|
if self.__xrangeIsTime:
|
|
|
plplot.pltimefmt("%H:%M")
|
|
|
|
|
|
self.setColormap()
|
|
|
self.initPlot()
|
|
|
|
|
|
def initPlot(self):
|
|
|
"""
|
|
|
|
|
|
"""
|
|
|
if plplot.plgdev() == '':
|
|
|
raise ValueError, "Plot device has not been initialize"
|
|
|
|
|
|
xrange = self.xrange
|
|
|
if xrange == None:
|
|
|
xrange = [0., 1.]
|
|
|
|
|
|
yrange = self.yrange
|
|
|
if yrange == None:
|
|
|
yrange = [0., 1.]
|
|
|
|
|
|
plplot.plvpor(self.__xpos[0], self.__xpos[1], self.__ypos[0], self.__ypos[1])
|
|
|
plplot.plwind(xrange[0], xrange[1], yrange[0], yrange[1])
|
|
|
plplot.plbox(self.__xopt, 0.0, 0, self.__yopt, 0.0, 0)
|
|
|
plplot.pllab(self.xlabel, self.ylabel, self.title)
|
|
|
|
|
|
def colorbarPlot(self):
|
|
|
data = numpy.arange(256)
|
|
|
data = numpy.reshape(data, (1,-1))
|
|
|
|
|
|
self.plotBox()
|
|
|
plplot.plimage(data,
|
|
|
self.xrange[0],
|
|
|
self.xrange[1],
|
|
|
self.yrange[0],
|
|
|
self.yrange[1],
|
|
|
0.,
|
|
|
255.,
|
|
|
self.xrange[0],
|
|
|
self.xrange[1],
|
|
|
self.yrange[0],
|
|
|
self.yrange[1],)
|
|
|
|
|
|
def basicXYPlot(self, x, y):
|
|
|
self.plotBox()
|
|
|
plplot.plline(x, y)
|
|
|
|
|
|
def basicXYwithErrorPlot(self):
|
|
|
pass
|
|
|
|
|
|
def basicLineTimePlot(self):
|
|
|
pass
|
|
|
|
|
|
def basicPcolorPlot(self, data, xmin, xmax, ymin, ymax, zmin, zmax):
|
|
|
"""
|
|
|
"""
|
|
|
|
|
|
self.plotBox()
|
|
|
plplot.plimage(data, xmin, xmax, ymin, ymax, zmin, zmax, xmin, xmax, ymin, ymax)
|
|
|
|
|
|
|
|
|
def __getBoxpltr(self, x, y, deltax=None, deltay=None):
|
|
|
|
|
|
if not(len(x)>1 and len(y)>1):
|
|
|
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
|
|
|
|
|
|
def advPcolorPlot(self, data, x, y, zmin=0., zmax=0.):
|
|
|
"""
|
|
|
"""
|
|
|
|
|
|
if self.__xg == None and self.__yg == None:
|
|
|
self.__getBoxpltr(x, y)
|
|
|
|
|
|
plplot.plimagefr(data, x[0], x[-1], y[0], y[-1], 0., 0., zmin, zmax, plplot.pltr2, self.__xg, self.__yg)
|
|
|
|
|
|
|
|
|
|