##// END OF EJS Templates
Avance de graficos: Scope
Daniel Valdez -
r135:d9a82835d983
parent child
Show More
@@ -1,78 +1,67
1
2 import numpy
1 import numpy
3 from schainPlotLib import Driver
2 from schainPlotLib import Driver
4
3
5 class Figure:
4 class Figure:
6
7 __driverObj = None
8 __isDriverOpen = False
5 __isDriverOpen = False
9 __isFigureOpen = False
6 __isFigureOpen = False
10 __isConfig = False
7 __isConfig = False
11 __xw = None
8 drvObj = None
12 __yw = None
13
14 xmin = None
15 xmax = None
16 minvalue = None
17 maxvalue = None
18
19 idfigure = None
9 idfigure = None
20 nframes = None
10 nframes = None
21 wintitle = None
11 wintitle = None
22 colormap = None
12 colormap = None
23 driver = None
13 driver = None
24 overplot = None
14 overplot = None
25
15 xmin = None
16 xmax = None
17 minvalue = None
18 maxvalue = None
26 frameObjList = []
19 frameObjList = []
20 figtitle = ""
27
21
28 def __init__(self, idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colormap=None, *showGraphs):
22 def __init__(self,idfigure, nframes, wintitle, xw=600, yw=800, overplot=0, driver='plplot', colorbar= True, colormap=None, *args):
29
30 self.driver = driver
31 self.idfigure = idfigure
23 self.idfigure = idfigure
32 self.nframes = nframes
24 self.nframes = nframes
33 self.wintitle = wintitle
25 self.wintitle = wintitle
26 self.xw = xw
27 self.yw = yw
34 self.overplot = overplot
28 self.overplot = overplot
29 self.colorbar = colorbar
35 self.colormap = colormap
30 self.colormap = colormap
36
31 #esta seccion deberia ser dinamica de acuerdo a len(args)
37 self.showGraph1 = showGraphs[0]
32 self.showGraph1 = args[0]
38 self.showGraph2 = showGraphs[1]
33 self.showGraph2 = args[1]
39 self.__xw = xw
40 self.__yw = yw
41
34
42 self.__driverObj = Driver(driver, idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs)
35 self.drvObj = Driver(driver, idfigure, xw, yw, wintitle, overplot, colorbar, colormap)
43
36
44 self.__driverObj.driver.configDriver()
37 self.drvObj.driver.setFigure()
45
38
46
39
47 def __openDriver(self):
40 def __openDriver(self):
48
41 self.drvObj.driver.openDriver()
49 self.__driverObj.driver.openDriver()
50
42
51 def __openFigure(self):
43 # def __openFigure(self):
44 # nrows, ncolumns = self.getSubplots()
45 # self.drvObj.driver.openFigure()
46 # self.drvObj.driver.setTitleFig(title)
47 # self.drvObj.driver.setSubPlots(nrows, ncolumns)
52
48
49 def __initFigure(self):
53 nrows, ncolumns = self.getSubplots()
50 nrows, ncolumns = self.getSubplots()
54
51 self.drvObj.driver.openFigure()
55 self.__driverObj.driver.openFigure()
52 self.drvObj.driver.setFigTitle(self.figtitle)
56 self.__driverObj.driver.setSubPlots(nrows, ncolumns)
53 self.drvObj.driver.setSubPlots(nrows, ncolumns)
57
58
59 def __isOutOfXRange(self, x):
60 pass
61
54
62 def __changeXRange(self, x):
55 def __isOutOfXRange(self,x):
63 pass
56 return 1
64
57
65 def __createFrames(self):
58 def __refresh(self):
66
59 self.drvObj.driver.refresh()
67 for frame in range(self.nframes):
60
68 frameObj = Frame(idframe = frame,
61 def createFrames(self):
69 showGraph1 = self.showGraph1,
62 raise ValueError, "No implemented"
70 showGraph2 = self.showGraph2
63
71 )
64 def plot1DArray(self, data1D, x=None, channelList=None, xmin=None, xmax=None, minvalue=None, maxvalue=None, figtitle=None, save=False, gpath='./'):
72
73 self.frameObjList.append(frameObj)
74
75 def plot1DArray(self, data1D, x=None, channelList=None, xmin=None, xmax=None, minvalue=None, maxvlaue=None, save=False, gpath='./'):
76
65
77 nx, ny = data1D.shape
66 nx, ny = data1D.shape
78
67
@@ -81,186 +70,163 class Figure:
81
70
82 if x == None:
71 if x == None:
83 x = numpy.arange(data1D.size)
72 x = numpy.arange(data1D.size)
84
73
74 if figtitle == None:
75 self.figtitle = ""
76 else:
77 self.figtitle = figtitle
78
85 if not(self.__isDriverOpen):
79 if not(self.__isDriverOpen):
86 self.__openDriver()
80 self.__openDriver()
87 self.__isDriverOpen = True
81 self.__isDriverOpen = True
88
82
89 if not(self.__isConfig):
83 if not(self.__isConfig):
90 if self.xmin == None: xmin = numpy.min(x)
84 self.xmin = xmin
91 if self.xmax == None: xmax = numpy.max(x)
85 self.xmax = xmax
92 if self.minvalue == None: minvalue = numpy.min(data1D)
86 self.minvalue = minvalue
93 if self.maxvalue == None: maxvalue = numpy.max(data1D)
87 self.maxvalue = maxvalue
88
89 if self.xmin == None: self.xmin = numpy.min(x)
90 if self.xmax == None: self.xmax = numpy.max(x)
91 if self.minvalue == None: self.minvalue = numpy.min(data1D)
92 if self.maxvalue == None: self.maxvalue = numpy.max(data1D)
94
93
95 self.__createFrames()
94 self.createFrames()
96 self.__isConfig = True
95 self.__isConfig = True
97
96
98 if not(self.__isOutOfXRange(x)):
97 if not(self.__isOutOfXRange(x)):
99 self.__changeXRange(x)
98 self.__changeXRange(x)
100
99
101 if self.__isFigureOpen:
100 if self.__isFigureOpen:
102 self.__driverObj.closePage()
101 self.driverObj.closePage()
103 self.__isFigureOpen = False
102 self.__isFigureOpen = False
104
103
105 if not(self.__isFigureOpen):
104 self.__initFigure()
106 self.__openFigure()
107
108 for channel in channelList:
109 frameObj = self.frameObjList[channel]
110 frameObj.init(xmin=xmin,
111 xmax=xmax,
112 minvalue=minvalue,
113 maxvalue=maxvalue)
114
115 self.__isFigureOpen = True
116
105
117 for channel in channelList:
106 for channel in channelList:
118 dataCh = data1D[channel]
107 # frametitle = self.plotTitleDict[channel]
119 frameObj = self.frameObjList[channel]
108 frameObj = self.frameObjList[channel]
120
109 frameObj.init(xmin=self.xmin,
121 frameObj.clearData()
110 xmax=self.xmax,
122 frameObj.plot(dataCh)
111 ymin=self.minvalue,
123
112 ymax=self.maxvalue,
124 frameObj.refresh()
113 minvalue=self.minvalue,
125
114 maxvalue=self.maxvalue)
126 if not(self.overplot):
127 self.__driverObj.closeFigure()
128 self.__isFigureOpen = False
129
130
131 def plot2DArray(self, x, y, data2D, xmin=None, xmax=None, ymin=None, ymax=None, minvalue=None, maxvalue=None, save=False, gpath='./'):
132
133 if not(self.__isCOpen):
134 self.__createFrames()
135 self.__openFigure()
136 self.__isOpen = True
137
138 if not(self.__isConfig):
139 self.setRange(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax, minvalue=minvalue, maxvalue=maxvalue)
140 self.__isConfig = True
141
115
142 for channel in channelList:
116 for channel in channelList:
143 dataCh = dataArray[channel]
117 dataCh = data1D[channel,:]
144 frameObj = frameObjList[channel]
118 frameObj = self.frameObjList[channel]
145 frameObj.plot(dataCh)
119 # frameObj.clearData()
146
120 frameObj.plot(x, dataCh)
147 def saveFigure(self, filename):
121
148 pass
122 # frameObj.refresh()
149
123 self.__refresh()
150
124
151 def getSubplots(self):
152
125
153 raise ValueError, "No implemented"
126 #
154
127 # if save:
155 class Frame:
128 # self.colorplotObj.setFigure(indexPlot)
156
129 # path = "/home/roj-idl71/tmp/"
157 """
130 # now = datetime.datetime.now().timetuple()
158 subplots
131 # file = "spc_img%02d_%03d_%02d%02d%02d.png"%(indexPlot,now[7],now[3],now[4],now[5])
159 """
132 # filename = os.path.join(path,file)
133 # self.colorplotObj.savePlot(indexPlot, filename)
134 #
135 # self.colorplotObj.closePage()
160
136
137 class Frame:
138 nplots = None
161 plotObjList = []
139 plotObjList = []
162 title = ""
140 title = ""
163 def __init__(self, idframe, showGraph1=False, showGraph2=False):
141 def __init__(self,drvObj, idframe):
164
142 self.drvObj = drvObj
165 self.idframe = idframe
143 self.idframe = idframe
166 self.showGraph1 = showGraph1
144 self.createPlots()
167 self.showGraph2 = showGraph2
168
169 self.nplots = 1 + showGraph1 + showGraph2#para el caso de RTI showGrap1 deberia indicar colorbar como propiedad, no como plot
170 self.__createPlots()
171
145
172 def __createPlots(self):
146 def createPlots(self):
173
147 raise ValueError, "No implemented"
174 for nplot in range(self.nplots):
175 xi, yi, xw, yw = self.__getScreenPos(nplot)
176 plotObj = Plot(xi, yi, xw, yw)
177
178 self.plotObjList.append(plotObj)
179
180 def __getScreenPosMainPlot(self):
181
182 """
183 Calcula las coordenadas asociadas al plot principal.
184 """
185
186 xi = 1.2
187 yi = 2.3
188 xw = 2.0
189 yw = 1.4
190
191 return xi, yi, xw, yw
192
193 def __getScreenPosGraph1(self):
194 xi = 1.2
195 yi = 2.3
196 xw = 2.0
197 yw = 1.4
198
199 return xi, yi, xw, yw
200
148
201 def __getScreenPosGraph2(self):
149 def getScreenPosMainPlot(self):
202 xi = 1.2
150 raise ValueError, "No implemented"
203 yi = 2.3
151
204 xw = 2.0
152 def getScreenPos(self, nplot):
205 yw = 1.4
206
207 return xi, yi, xw, yw
208
209 def __getScreenPos(self, nplot):
210
153
211 if nplot == 0:
154 if nplot == 0:
212 xi, yi, xw, yw = self.__getScreenPosMain()
155 xi, yi, xw, yw = self.getScreenPosMainPlot()
213 if nplot == 1:
214 xi, yi, xw, yw = self.__getScreenPosMain()
215 if nplot == 2:
216 xi, yi, xw, yw = self.__getScreenPosMain()
217
218 return xi, yi, xw, yw
156 return xi, yi, xw, yw
219
220
221 def init(self, xmin, xmax, ymin, yamx, minvalue, maxvalue):
222
223 """
224 """
225
226 for plotObj in self.plotObjList:
227 plotObj.plotBox(xmin, xmax, ymin, yamx, minvalue, maxvalue)
228
157
229 def clearData(self):
158
230 pass
159 def init(self, xmin, xmax, ymin, ymax, minvalue, maxvalue):
231
160
232 def plot(self, data):
233
234 for plotObj in self.plotObjList:
161 for plotObj in self.plotObjList:
235 plotObj.plotData(data)
162 plotObj.plotBox(xmin, xmax, ymin, ymax, minvalue, maxvalue)
236
163 # plotObj.setLabels() # ? evaluar si conviene colocarlo dentro del plotbox
237 def refresh(self):
238 pass
239
164
240
165 def refresh(self):
166 for plotObj in self.plotObjList:
167 plotObj.refresh()
241
168
242 class Plot:
169 class Plot:
243
244 title = ""
170 title = ""
245
171 xlabel = ""
246 def __init__(self, xi, yi, xw, yw):
172 ylabel = ""
247
173 xaxisastime = None
174 timefmt = None
175 xopt = ""
176 yopt = ""
177 xpos = None
178 ypos = None
179 szchar = None
180 idframe = None
181 idplot = None
182
183 def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw):
184 self.drvObj = drvObj
185 self.idframe = idframe
186 self.idplot = idplot
248 self.xi = xi
187 self.xi = xi
249 self.yi = yi
188 self.yi = yi
250 self.xw = xw
189 self.xw = xw
251 self.yw = yw
190 self.yw = yw
252
253 def __setRange(self, xrange, yrange, zrange):
254 pass
255
256 def __setLabels(self, xlabel, ylabel, zlabel):
257 pass
258
191
259
192 # def setLabels(self):
260 def plotBox(self,xmin, xmax, ymin, yamx, minvalue, maxvalue):
193 # self.drvObj.driver.setPlotLabels(self.xlabel, self.ylabel, self.title)
261 pass
194
262
195 def plotBox(self, xmin, xmax, ymin, ymax, minvalue, maxvalue):
263 def plotData(self):
196 self.xmin = xmin
197 self.xmax = xmax
198 self.ymin = ymin
199 self.ymax = ymax
200 self.minvalue = minvalue
201 self.maxvalue = maxvalue
202
203 self.drvObj.driver.plotBox(self.idframe,
204 self.xpos,
205 self.ypos,
206 self.xmin,
207 self.xmax,
208 self.ymin,
209 self.ymax,
210 self.minvalue,
211 self.maxvalue,
212 self.xopt,
213 self.yopt,
214 self.szchar,
215 self.xaxisastime,
216 self.timefmt)
217
218 self.drvObj.driver.setPlotLabels(self.xlabel, self.ylabel, self.title)
219
220 def plotBasicLine(self,x, y, color):
221 """
222 Inputs:
223 x:
224
225 y:
226
227 color:
228 """
229 self.drvObj.driver.basicLine(x, y, self.xmin, self.xmax, self.ymin, self.ymax, color, self.idframe, self.xpos, self.ypos)
230
264
231
265 raise ValueError, ""
232 No newline at end of file
266
This diff has been collapsed as it changes many lines, (652 lines changed) Show them Hide them
@@ -4,11 +4,11 import sys
4 import plplot #condicional
4 import plplot #condicional
5
5
6 class Driver:
6 class Driver:
7 def __init__(self,driver, idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs):
7 def __init__(self,driver, idfigure, xw, yw, wintitle, overplot, colorbar, colormap):
8 if driver == "plplot":
8 if driver == "plplot":
9 self.driver = PlplotDriver(idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs)
9 self.driver = PlplotDriver(idfigure, xw, yw, wintitle, overplot, colorbar, colormap)
10 elif driver == "mpl":
10 elif driver == "mpl":
11 self.driver = MplDriver(idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs)
11 self.driver = MplDriver(idfigure, xw, yw, wintitle, overplot, colormap)
12 else:
12 else:
13 raise ValueError, "The driver: %s is not defined"%driver
13 raise ValueError, "The driver: %s is not defined"%driver
14
14
@@ -17,7 +17,7 class PlplotDriver:
17 __isDriverOpen = False
17 __isDriverOpen = False
18 pldriver = None
18 pldriver = None
19
19
20 def __init__(self, idfigure, xw, yw, wintitle, overplot, colormap, *showGraphs):
20 def __init__(self, idfigure, xw, yw, wintitle, overplot, colorbar, colormap):
21
21
22 if idfigure == None:
22 if idfigure == None:
23 raise ValueError, 'idfigure input must be defined'
23 raise ValueError, 'idfigure input must be defined'
@@ -27,11 +27,12 class PlplotDriver:
27 self.yw = yw
27 self.yw = yw
28 self.wintitle = wintitle
28 self.wintitle = wintitle
29 self.overplot = overplot
29 self.overplot = overplot
30 self.colorbar = colorbar
30 self.colormap = colormap
31 self.colormap = colormap
31 self.showGraph1 = showGraphs[0]
32
32 self.showGraph2 = showGraphs[1]
33
33
34
34 def configDriver(self):
35 def setFigure(self):
35 """
36 """
36 previous configuration to open(init) the plplot driver
37 previous configuration to open(init) the plplot driver
37 """
38 """
@@ -80,604 +81,73 class PlplotDriver:
80 plplot.pleop()
81 plplot.pleop()
81
82
82 def setSubPlots(self,nrows, ncolumns):
83 def setSubPlots(self,nrows, ncolumns):
83 plplot.plssub(nrows, ncolumns)
84 plplot.plssub(ncolumns,nrows)
84
85
85 def setColorMap(self,colormap):
86 def setPlotLabels(self, xlabel, ylabel, title):
86
87 plplot.pllab(xlabel, ylabel, title)
87 if colormap == None:
88 return
89
90 ncolor = None
91 rgb_lvl = None
92
93 # Routine for defining a specific color map 1 in HLS space.
94 # if gray is true, use basic grayscale variation from half-dark to light.
95 # otherwise use false color variation from blue (240 deg) to red (360 deg).
96
88
97 # Independent variable of control points.
89 def setFigTitle(self, title,color="black", szchar=0.55):
90 self.setSubPlots(1, 0)
91 plplot.pladv(0)
92 plplot.plvpor(0., 1., 0., 1.)
98
93
99 i = numpy.array((0., 1.))
94 if color == "black":
95 plplot.plcol0(1)
96 if color == "white":
97 plplot.plcol0(15)
100
98
101 if colormap=="gray":
99 plplot.plschr(0.0,szchar)
102 ncolor = 256
100 plplot.plmtex("t",-1., 0.5, 0.5, title)
103 # Hue for control points. Doesn't matter since saturation is zero.
101
104 h = numpy.array((0., 0.))
102 def plotBox(self, id, xpos, ypos, xmin, xmax, ymin, ymax, minvalue, maxvalue, xopt, yopt, szchar=0.6, xaxisastime = False, timefmt="%H:%M"):
105 # Lightness ranging from half-dark (for interest) to light.
103 """
106 l = numpy.array((0.5, 1.))
104 xopt, yopt: entradas que no se aplican en MPL
107 # Gray scale has zero saturation
105 """
108 s = numpy.array((0., 0.))
106 plplot.pladv(id)
109
107 plplot.plschr(0.0,szchar-0.05)
110 # number of cmap1 colours is 256 in this case.
108 plplot.plvpor(xpos[0], xpos[1], ypos[0], ypos[1])
111 plplot.plscmap1n(ncolor)
109 plplot.plwind(float(xmin), float(xmax), float(ymin), float(ymax))
112 # Interpolate between control points to set up cmap1.
110 if xaxisastime:
113 plplot.plscmap1l(0, i, h, l, s)
111 plplot.pltimefmt(timefmt)
114
112 timedelta = (xmax - xmin + 1)/8.
115 return None
113 plplot.plbox(xopt, timedelta, 3, yopt, 0.0, 0)
116
114 else:
117 if colormap == 'jet':
115 plplot.plbox(xopt, 0.0, 0, yopt, 0.0, 0)
118 ncolor = 256
119 pos = numpy.zeros((ncolor))
120 r = numpy.zeros((ncolor))
121 g = numpy.zeros((ncolor))
122 b = numpy.zeros((ncolor))
123
116
124 for i in range(ncolor):
117 def refresh(self):
125 if(i <= 35.0/100*(ncolor-1)): rf = 0.0
118 plplot.plflush()
126 elif (i <= 66.0/100*(ncolor-1)): rf = (100.0/31)*i/(ncolor-1) - 35.0/31
127 elif (i <= 89.0/100*(ncolor-1)): rf = 1.0
128 else: rf = (-100.0/22)*i/(ncolor-1) + 111.0/22
129
119
130 if(i <= 12.0/100*(ncolor-1)): gf = 0.0
120 def basicLine(self, x, y, xmin, xmax, ymin, ymax, color, id, xpos, ypos):
131 elif(i <= 38.0/100*(ncolor-1)): gf = (100.0/26)*i/(ncolor-1) - 12.0/26
132 elif(i <= 64.0/100*(ncolor-1)): gf = 1.0
133 elif(i <= 91.0/100*(ncolor-1)): gf = (-100.0/27)*i/(ncolor-1) + 91.0/27
134 else: gf = 0.0
135
121
136 if(i <= 11.0/100*(ncolor-1)): bf = (50.0/11)*i/(ncolor-1) + 0.5
122 """
137 elif(i <= 34.0/100*(ncolor-1)): bf = 1.0
123 Inputs:
138 elif(i <= 65.0/100*(ncolor-1)): bf = (-100.0/31)*i/(ncolor-1) + 65.0/31
124 x: datos en el eje x
139 else: bf = 0
140
141 r[i] = rf
142 g[i] = gf
143 b[i] = bf
144
125
145 pos[i] = float(i)/float(ncolor-1)
126 y: datos en el eje y
146
127
147
128 xmin, xmax: intervalo de datos en el eje x
148 plplot.plscmap1n(ncolor)
149 plplot.plscmap1l(1, pos, r, g, b)
150
151
152
153 if colormap=="br_green":
154 ncolor = 256
155 # Hue ranges from blue (240 deg) to red (0 or 360 deg)
156 h = numpy.array((240., 0.))
157 # Lightness and saturation are constant (values taken from C example).
158 l = numpy.array((0.6, 0.6))
159 s = numpy.array((0.8, 0.8))
160
161 # number of cmap1 colours is 256 in this case.
162 plplot.plscmap1n(ncolor)
163 # Interpolate between control points to set up cmap1.
164 plplot.plscmap1l(0, i, h, l, s)
165
129
166 return None
130 ymin, ymax: intervalo de datos en el eje y
167
168 if colormap=="tricolor":
169 ncolor = 3
170 # Hue ranges from blue (240 deg) to red (0 or 360 deg)
171 h = numpy.array((240., 0.))
172 # Lightness and saturation are constant (values taken from C example).
173 l = numpy.array((0.6, 0.6))
174 s = numpy.array((0.8, 0.8))
175
176 # number of cmap1 colours is 256 in this case.
177 plplot.plscmap1n(ncolor)
178 # Interpolate between control points to set up cmap1.
179 plplot.plscmap1l(0, i, h, l, s)
180
131
181 return None
132 color: color de la linea a dibujarse
182
183 if colormap == 'rgb' or colormap == 'rgb666':
184
133
185 color_sz = 6
134 id: identificador del plot, en este caso indica al frame que pertenece, la posicion de cada
186 ncolor = color_sz*color_sz*color_sz
135 plot esta definido por xpos, ypos.
187 pos = numpy.zeros((ncolor))
188 r = numpy.zeros((ncolor))
189 g = numpy.zeros((ncolor))
190 b = numpy.zeros((ncolor))
191 ind = 0
192 for ri in range(color_sz):
193 for gi in range(color_sz):
194 for bi in range(color_sz):
195 r[ind] = ri/(color_sz-1.0)
196 g[ind] = gi/(color_sz-1.0)
197 b[ind] = bi/(color_sz-1.0)
198 pos[ind] = ind/(ncolor-1.0)
199 ind += 1
200 rgb_lvl = [6,6,6] #Levels for RGB colors
201
136
202 if colormap == 'rgb676':
137 xpos,ypos: coordenadas que indican la posicion del plot en el frame
203 ncolor = 6*7*6
204 pos = numpy.zeros((ncolor))
205 r = numpy.zeros((ncolor))
206 g = numpy.zeros((ncolor))
207 b = numpy.zeros((ncolor))
208 ind = 0
209 for ri in range(8):
210 for gi in range(8):
211 for bi in range(4):
212 r[ind] = ri/(6-1.0)
213 g[ind] = gi/(7-1.0)
214 b[ind] = bi/(6-1.0)
215 pos[ind] = ind/(ncolor-1.0)
216 ind += 1
217 rgb_lvl = [6,7,6] #Levels for RGB colors
218
219 if colormap == 'rgb685':
220 ncolor = 6*8*5
221 pos = numpy.zeros((ncolor))
222 r = numpy.zeros((ncolor))
223 g = numpy.zeros((ncolor))
224 b = numpy.zeros((ncolor))
225 ind = 0
226 for ri in range(8):
227 for gi in range(8):
228 for bi in range(4):
229 r[ind] = ri/(6-1.0)
230 g[ind] = gi/(8-1.0)
231 b[ind] = bi/(5-1.0)
232 pos[ind] = ind/(ncolor-1.0)
233 ind += 1
234 rgb_lvl = [6,8,5] #Levels for RGB colors
235
236 if colormap == 'rgb884':
237 ncolor = 8*8*4
238 pos = numpy.zeros((ncolor))
239 r = numpy.zeros((ncolor))
240 g = numpy.zeros((ncolor))
241 b = numpy.zeros((ncolor))
242 ind = 0
243 for ri in range(8):
244 for gi in range(8):
245 for bi in range(4):
246 r[ind] = ri/(8-1.0)
247 g[ind] = gi/(8-1.0)
248 b[ind] = bi/(4-1.0)
249 pos[ind] = ind/(ncolor-1.0)
250 ind += 1
251 rgb_lvl = [8,8,4] #Levels for RGB colors
252
253 if ncolor == None:
254 raise ValueError, "The colormap selected is not valid"
255
256 plplot.plscmap1n(ncolor)
257 plplot.plscmap1l(1, pos, r, g, b)
258
259 return rgb_lvl
260
261 def setBox(self):
262
263 pass
264
265 def refreshBox(self):
266
267 pass
268
269 def save(self):
270
271 pass
272
273 def show(self):
274
275 pass
276
277 def colorbarPlot(self):
278
279 pass
280
281 def linePlot(self):
282
283 pass
284
285 def pcolorPlot(self):
286
287 pass
288
289 def setLabels(self):
290
291 pass
292
293
294
295
296
297 class MplDriver:
298 def __init__(self):
299 pass
300
301 def config_driver(idfigure, wintitle, width, height):
302 plplot.plsstrm(idfigure)
303 plplot.plparseopts([wintitle],plplot.PL_PARSE_FULL)
304 plplot.plsetopt("geometry", "%dx%d"%(width,height))
305
306 def ini_driver(driver):
307 if sys.platform == "darwin":
308 plplot.plsdev("xwin")
309 if sys.platform == "linux":
310 plplot.plsdev("xcairo")
311 plplot.plscolbg(255,255,255)
312 plplot.plscol0(1,0,0,0)
313 plplot.plinit()
314 plplot.plspause(False)
315
316 def set_subpages(ncol,nrow):
317 plplot.plssub(ncol,nrow)
318
319 def cmap1_init(colormap="gray"):
320
321 if colormap == None:
322 return
323
324 ncolor = None
325 rgb_lvl = None
326
327 # Routine for defining a specific color map 1 in HLS space.
328 # if gray is true, use basic grayscale variation from half-dark to light.
329 # otherwise use false color variation from blue (240 deg) to red (360 deg).
330
331 # Independent variable of control points.
332 i = numpy.array((0., 1.))
333 if colormap=="gray":
334 ncolor = 256
335 # Hue for control points. Doesn't matter since saturation is zero.
336 h = numpy.array((0., 0.))
337 # Lightness ranging from half-dark (for interest) to light.
338 l = numpy.array((0.5, 1.))
339 # Gray scale has zero saturation
340 s = numpy.array((0., 0.))
341
342 # number of cmap1 colours is 256 in this case.
343 plplot.plscmap1n(ncolor)
344 # Interpolate between control points to set up cmap1.
345 plplot.plscmap1l(0, i, h, l, s)
346
347 return None
348
349 if colormap == 'jet':
350 ncolor = 256
351 pos = numpy.zeros((ncolor))
352 r = numpy.zeros((ncolor))
353 g = numpy.zeros((ncolor))
354 b = numpy.zeros((ncolor))
355
356 for i in range(ncolor):
357 if(i <= 35.0/100*(ncolor-1)): rf = 0.0
358 elif (i <= 66.0/100*(ncolor-1)): rf = (100.0/31)*i/(ncolor-1) - 35.0/31
359 elif (i <= 89.0/100*(ncolor-1)): rf = 1.0
360 else: rf = (-100.0/22)*i/(ncolor-1) + 111.0/22
361
362 if(i <= 12.0/100*(ncolor-1)): gf = 0.0
363 elif(i <= 38.0/100*(ncolor-1)): gf = (100.0/26)*i/(ncolor-1) - 12.0/26
364 elif(i <= 64.0/100*(ncolor-1)): gf = 1.0
365 elif(i <= 91.0/100*(ncolor-1)): gf = (-100.0/27)*i/(ncolor-1) + 91.0/27
366 else: gf = 0.0
367
368 if(i <= 11.0/100*(ncolor-1)): bf = (50.0/11)*i/(ncolor-1) + 0.5
369 elif(i <= 34.0/100*(ncolor-1)): bf = 1.0
370 elif(i <= 65.0/100*(ncolor-1)): bf = (-100.0/31)*i/(ncolor-1) + 65.0/31
371 else: bf = 0
372
138
373 r[i] = rf
139 """
374 g[i] = gf
375 b[i] = bf
376
377 pos[i] = float(i)/float(ncolor-1)
378
379
380 plplot.plscmap1n(ncolor)
381 plplot.plscmap1l(1, pos, r, g, b)
382
383
384
385 if colormap=="br_green":
386 ncolor = 256
387 # Hue ranges from blue (240 deg) to red (0 or 360 deg)
388 h = numpy.array((240., 0.))
389 # Lightness and saturation are constant (values taken from C example).
390 l = numpy.array((0.6, 0.6))
391 s = numpy.array((0.8, 0.8))
392
393 # number of cmap1 colours is 256 in this case.
394 plplot.plscmap1n(ncolor)
395 # Interpolate between control points to set up cmap1.
396 plplot.plscmap1l(0, i, h, l, s)
397
398 return None
399
400 if colormap=="tricolor":
401 ncolor = 3
402 # Hue ranges from blue (240 deg) to red (0 or 360 deg)
403 h = numpy.array((240., 0.))
404 # Lightness and saturation are constant (values taken from C example).
405 l = numpy.array((0.6, 0.6))
406 s = numpy.array((0.8, 0.8))
407
408 # number of cmap1 colours is 256 in this case.
409 plplot.plscmap1n(ncolor)
410 # Interpolate between control points to set up cmap1.
411 plplot.plscmap1l(0, i, h, l, s)
412
413 return None
414
415 if colormap == 'rgb' or colormap == 'rgb666':
416
140
417 color_sz = 6
141 plplot.pladv(id)
418 ncolor = color_sz*color_sz*color_sz
142 plplot.plvpor(xpos[0], xpos[1], ypos[0], ypos[1])
419 pos = numpy.zeros((ncolor))
143 plplot.plwind(float(xmin),float(xmax), float(ymin), float(ymax))
420 r = numpy.zeros((ncolor))
421 g = numpy.zeros((ncolor))
422 b = numpy.zeros((ncolor))
423 ind = 0
424 for ri in range(color_sz):
425 for gi in range(color_sz):
426 for bi in range(color_sz):
427 r[ind] = ri/(color_sz-1.0)
428 g[ind] = gi/(color_sz-1.0)
429 b[ind] = bi/(color_sz-1.0)
430 pos[ind] = ind/(ncolor-1.0)
431 ind += 1
432 rgb_lvl = [6,6,6] #Levels for RGB colors
433
144
434 if colormap == 'rgb676':
145 if color == "blue":
435 ncolor = 6*7*6
146 colline = 9
436 pos = numpy.zeros((ncolor))
147 if color == "green":
437 r = numpy.zeros((ncolor))
148 colline = 3
438 g = numpy.zeros((ncolor))
149
439 b = numpy.zeros((ncolor))
150 plplot.plcol0(colline)
440 ind = 0
151 plplot.plline(x, y)
441 for ri in range(8):
442 for gi in range(8):
443 for bi in range(4):
444 r[ind] = ri/(6-1.0)
445 g[ind] = gi/(7-1.0)
446 b[ind] = bi/(6-1.0)
447 pos[ind] = ind/(ncolor-1.0)
448 ind += 1
449 rgb_lvl = [6,7,6] #Levels for RGB colors
450
451 if colormap == 'rgb685':
452 ncolor = 6*8*5
453 pos = numpy.zeros((ncolor))
454 r = numpy.zeros((ncolor))
455 g = numpy.zeros((ncolor))
456 b = numpy.zeros((ncolor))
457 ind = 0
458 for ri in range(8):
459 for gi in range(8):
460 for bi in range(4):
461 r[ind] = ri/(6-1.0)
462 g[ind] = gi/(8-1.0)
463 b[ind] = bi/(5-1.0)
464 pos[ind] = ind/(ncolor-1.0)
465 ind += 1
466 rgb_lvl = [6,8,5] #Levels for RGB colors
467
468 if colormap == 'rgb884':
469 ncolor = 8*8*4
470 pos = numpy.zeros((ncolor))
471 r = numpy.zeros((ncolor))
472 g = numpy.zeros((ncolor))
473 b = numpy.zeros((ncolor))
474 ind = 0
475 for ri in range(8):
476 for gi in range(8):
477 for bi in range(4):
478 r[ind] = ri/(8-1.0)
479 g[ind] = gi/(8-1.0)
480 b[ind] = bi/(4-1.0)
481 pos[ind] = ind/(ncolor-1.0)
482 ind += 1
483 rgb_lvl = [8,8,4] #Levels for RGB colors
484
485 if ncolor == None:
486 raise ValueError, "The colormap selected is not valid"
487
488 plplot.plscmap1n(ncolor)
489 plplot.plscmap1l(1, pos, r, g, b)
490
491 return rgb_lvl
492
493 def set_colormap(colormap="jet"):
494 cmap1_init(colormap)
495
496 def save_figure(filename,width,height):
497 curr_strm = plplot.plgstrm()
498 save_strm = plplot.plmkstrm()
499 plplot.plsetopt("geometry", "%dx%d"%(width,height))
500 if sys.platform == "darwin":
501 plplot.plsdev("png")
502 if sys.platform == "linux":
503 plplot.plsdev("pngcairo")
504 plplot.plsfnam(filename)
505 plplot.plcpstrm(curr_strm,0)
506 plplot.plreplot()
507 plplot.plend1()
508 plplot.plsstrm(curr_strm)
509
510 def set_new_figure():
511 plplot.plbop()
512 plplot.pladv(0)
513
514 def close_figure():
515 plplot.pleop()
516
517 def set_strm(indexPlot):
518 plplot.plsstrm(indexPlot)
519
520 def refresh():
521 plplot.plflush()
522
523 def show():
524 plplot.plspause(True)
525 plplot.plend()
526
527 def set_title(pltitle,color, szchar=0.7):
528 setSubpages(1, 0)
529 plplot.pladv(0)
530 plplot.plvpor(0., 1., 0., 1.)
531
532 if color == "black":
533 plplot.plcol0(1)
152 plplot.plcol0(1)
534 if color == "white":
153 plplot.plbox("bcst", 0.0, 0, "bcst", 0.0, 0)
535 plplot.plcol0(15)
536
537 plplot.plschr(0.0,szchar)
538 plplot.plmtex("t",-1., 0.5, 0.5, pltitle)
539
540 def set_line_style(style):
541 plplot.pllsty(style)
542
543 def set_color(color):
544 plplot.plcol0(color)
545
546 def set_labels(xlabel, ylabel, title):
547 plplot.pllab(xlabel, ylabel, title)
548
549 def box(subplot, xpos, ypos, xmin, xmax, ymin, ymax, xopt, yopt, szchar, xaxisastime, timefmt="%H:%M"):
550 plplot.pladv(subplot)
551 plplot.plschr(0.0,szchar-0.05)
552 plplot.plvpor(xpos[0], xpos[1], ypos[0], ypos[1])
553 plplot.plwind(float(xmin),
554 float(xmax),
555 float(ymin),
556 float(ymax)
557 )
558 if xaxisastime:
559 plplot.pltimefmt(timefmt)
560 timedelta = (xmax - xmin + 1)/8.
561 plplot.plbox(xopt, timedelta, 3, yopt, 0.0, 0)
562 else:
563 plplot.plbox(xopt, 0.0, 0, yopt, 0.0, 0)
564
565 def colorbar(xmin=0., xmax=1., ymin=0., ymax=1.):
566 data = numpy.arange(256)
567 data = numpy.reshape(data, (1,-1))
568
569 plplot.plimage(data,
570 float(xmin),
571 float(xmax),
572 float(ymin),
573 float(ymax),
574 0.,
575 255.,
576 float(xmin),
577 float(xmax),
578 float(ymin),
579 float(ymax))
580
581 def basicline_timeplot(x, y,colline=1):
582 plplot.plcol0(colline)
583 plplot.plline(x, y)
584 plplot.plcol0(1)
585
586 def basic_xy_plot(x, y):
587 plplot.plline(x, y)
588
589 def basic_pcolor_plot(data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=None, zmax=None):
590 """
591 """
592 if xmin == None: xmin = x[0]
593 if xmax == None: xmax = x[-1]
594 if ymin == None: ymin = y[0]
595 if ymax == None: ymax = y[-1]
596 if zmin == None: zmin = numpy.nanmin(data)
597 if zmax == None: zmax = numpy.nanmax(data)
598
599 plplot.plimage(data,
600 float(x[0]),
601 float(x[-1]),
602 float(y[0]),
603 float(y[-1]),
604 float(zmin),
605 float(zmax),
606 float(xmin),
607 float(xmax),
608 float(ymin),
609 float(ymax)
610 )
611
612 def image_plot(self,x,y,z,xrange,yrange,zrange):
613 xi = x[0]
614 xf = x[-1]
615 yi = y[0]
616 yf = y[-1]
617
618 plplot.plimage(z,
619 float(xi),
620 float(xf),
621 float(yi),
622 float(yf),
623 float(zrange[0]),
624 float(zrange[1]),
625 float(xi),
626 float(xf),
627 float(yrange[0]),
628 yrange[1])
629
630 def adv_pcolor_plot(data, x, y, xg, yg, xmin=None, xmax=None, ymin=None, ymax=None, zmin=0., zmax=0.):
631 plplot.plimagefr(data,
632 float(xmin),
633 float(xmax),
634 float(ymin),
635 float(ymax),
636 0.,
637 0.,
638 float(zmin),
639 float(zmax),
640 plplot.pltr2,
641 xg,
642 yg)
643
644 #------------------------------------
645
646 #def get_grid(x, y, deltax=None, deltay=None):
647 #
648 # if not(len(x)>0 and len(y)>0):
649 # raise ValueError, "x axis and y axis are empty"
650 #
651 # if deltax == None: deltax = x[-1] - x[-2]
652 # if deltay == None: deltay = y[-1] - y[-2]
653 #
654 # x1 = numpy.append(x, x[-1] + deltax)
655 # y1 = numpy.append(y, y[-1] + deltay)
656 #
657 # xg = (numpy.multiply.outer(x1, numpy.ones(len(y1))))
658 # yg = (numpy.multiply.outer(numpy.ones(len(x1)), y1))
659 #
660 # self.__xg = xg
661 # self.__yg = yg
662 #
663 # return xg, yg
664 #
665 #def advPcolorPlot(data, x, y, xmin=None, xmax=None, ymin=None, ymax=None, zmin=0., zmax=0., deltax=1.0, deltay=None, getGrid = True):
666 # if getGrid:
667 # xg, yg = self.__getBoxpltr(x, y, deltax, deltay)
668 # else:
669 # xg = self.__xg
670 # yg = self.__yg
671 #
672 # plplot.plimagefr(data,
673 # float(xmin),
674 # float(xmax),
675 # float(ymin),
676 # float(ymax),
677 # 0.,
678 # 0.,
679 # float(zmin),
680 # float(zmax),
681 # plplot.pltr2,
682 # xg,
683 # yg)
@@ -1,116 +1,106
1 import numpy
1 import numpy
2 from schainPlot import *
2 from schainPlot import *
3 #from schainPlotLib import Driver
3
4
4 class ScopeFigure(Figure):
5 class ScopeFigure(Figure):
5 overplot = 0
6 overplot = 0
6 xw = 700
7 xw = 700
7 yw = 600
8 yw = 650
9 colorbar = None
10 # frameObjList = []
8
11
9 def __init__(self,idfigure,nframes,wintitle,driver):
12 def __init__(self,idfigure,nframes,wintitle,driver):
10
11 args = (0, 0)
12 colormap = None
13 colormap = None
13 Figure.__init__(self,idfigure,nframes,wintitle,self.xw,self.yw,self.overplot,driver,colormap,*args)
14 colorbar = False
15 addGraph = 0
16 args=(addGraph, addGraph)
17
14
18
19 self.idfigure = idfigure
15 self.nframes = nframes
20 self.nframes = nframes
16 self.showColorbar = 0
21 self.wintitle = wintitle
17 self.showPowerProfile = 0
22 # self.xw =
18
23 # self.yw =
19 def getSubplots(self):
24 # self.overplot =
20 nrows = self.nframes
25 self.driver = driver
21 ncolumns = 1
26 self.colorbar = colorbar
27 self.colormap = colormap
22
28
23 return nrows, ncolumns
29 self.drvObj = Driver(self.driver, self.idfigure, self.xw, self.yw, self.wintitle, self.overplot, self.colorbar, self.colormap)
24
30 self.drvObj.driver.setFigure()
25 def __createFrames(self):
26 for frame in range(self.nframes):
27 frameObj = ScopeFrame(idFrame = frame)
28
29 self.frameObjList.append(frameObj)
30
31
31
32
32 # Figure.__init__(self,idfigure,nframes,wintitle,self.xw,self.yw,self.overplot,driver,colorbar,colormap,*args)
33 class ScopeFrame(Frame):
34 def __init__(self,idFrame):
35 self.idFrame = idFrame
36 self.showGraph1 = 0
37 self.showGraph2 = 0
38
39 def setXYPos(self):
40 pass
41
42 class RTIFigure(Figure):
43
44 overplot = 1 # igual a 1 porque el grafico es RTI, para el caso de Spectra(Spc,CrossSpc) overplot = 0
45 xw = 700
46 yw = 150
47
48
49 def __init__(self, idfigure, nframes, wintitle, driver, colormap, showColorbar, showPowerProfile):
50
51 showGraphs = (showColorbar, showPowerProfile)
52
53 Figure.__init__(self,
54 idfigure=idfigure,
55 nframes = nframes,
56 wintitle=wintitle,
57 xw=self.xw,
58 yw=self.yw,
59 overplot=self.overplot,
60 driver=driver,
61 colormap=colormap,
62 *showGraphs)
63
64 self.nframes = nframes
65 self.showColorbar = showColorbar
66 self.showPowerProfile = showPowerProfile
67
33
68 def getSubplots(self):
34 def getSubplots(self):
69 nrows = self.nframes
35 nrows = self.nframes
70 ncolumns = 1
36 ncolumns = 1
71
72 return nrows, ncolumns
37 return nrows, ncolumns
73
38
74 def __createFrames(self):
39 def createFrames(self):
75 for frame in range(self.nframes):
40 for frame in range(self.nframes):
76 frameObj = RTIFrame(idFrame = frame,
41 frameObj = ScopeFrame(self.drvObj,frame + 1)
77 showGraph1 = self.showColorbar,
78 showGraph2 = self.showPowerProfile
79 )
80
81 self.frameObjList.append(frameObj)
42 self.frameObjList.append(frameObj)
82
43
83 class RTIFrame(Frame):
84 def __init__(self,idFrame, showColorbar, showPowerProfile):
85 self.idFrame = idFrame
86 self.showGraph1 = showColorbar
87 self.showGraph2 = showPowerProfile
88
44
89 def setXYPos(self):
45 class ScopeFrame(Frame):
90 pass
46 # plotObjList = []
47 xlabel = ""
48 ylabel = ""
49 title = ""
50 def __init__(self,drvObj,idframe):
51 self.drvObj = drvObj
52 self.idframe = idframe
53 self.nplots = 1 #nplots/frame
54 self.createPlots()
55 # Frame.__init__(self, drvObj, idframe)
91
56
92 class SelfSpcFigure(Figure):
57 def getScreenPosMainPlot(self):#cada Frame determina las coordenadas de los plots
93 def __init__(self):
58 xi = 0.07; xw = 0.9
94 pass
59 yi = 0.20; yw = 0.75
95
60 return xi,yi,xw,yw
96 class SelfSpcFrame(Frame):
97 def __init__(self):
98 pass
99
61
100 class CrossSpcFigure(Figure):
62 def createPlots(self):
101 def __init__(self):
63 plotObjList = []
102 pass
64 for idplot in range(self.nplots):
65 xi, yi, xw, yw = self.getScreenPos(idplot)
66 plotObj = Plot1D(self.drvObj, self.idframe, idplot, xi, yi, xw, yw)
67 plotObjList.append(plotObj)
68 self.plotObjList = plotObjList
69 # self.plotObjList.append(plotObj)
103
70
104 class CrossSpcFrame(Frame):
71 def plot(self, x, y, z=None):
105 def __init__(self):
72 for plotObj in self.plotObjList:
106 pass
73 plotObj.plot(x, y)
74
107
75
76 class Plot1D(Plot):
77
78 def __init__(self, drvObj, idframe, idplot, xi, yi, xw, yw):
79 self.drvObj = drvObj
80 self.idframe = idframe
81 self.idplot = idplot
82 self.xi = xi
83 self.yi = yi
84 self.xw = xw
85 self.yw = yw
86 self.xpos = [self.xi,self.xw]
87 self.ypos = [self.yi,self.yw]
88 self.xaxisastime = False
89 self.timefmt = None
90 self.xopt = "bcnst"
91 self.yopt = "bcnstv"
92 self.szchar = 1.0
93 self.title = "Channel %d"%self.idframe
94 self.xlabel = "x-axis"
95 self.ylabel = "y-axis"
108
96
109 if __name__ == '__main__':
110 idfigure=0
111 nframes=2
112 wintitle=''
113 driver='plplot'
114 scopeObj = ScopeFigure(idfigure,nframes,wintitle,driver)
115
97
116
98 def plot(self,x,y):
99 if y.dtype == "complex128":
100 color="blue"
101 self.plotBasicLine(x, y.real, color)
102 color="red"
103 self.plotBasicLine(x, y.imag, color)
104 else:
105 color="blue"
106 self.plotBasicLine(x, y, color)
General Comments 0
You need to be logged in to leave comments. Login now