diff --git a/pywafo/src/wafo/wafodata.py b/pywafo/src/wafo/wafodata.py index 3c77b17..559ce98 100644 --- a/pywafo/src/wafo/wafodata.py +++ b/pywafo/src/wafo/wafodata.py @@ -1,4 +1,5 @@ import warnings +from graphutil import cltext from plotbackend import plotbackend from time import gmtime, strftime import numpy as np @@ -182,25 +183,25 @@ class Plotter_1d(object): plotbackend.show() def plot(self, wdata, *args, **kwds): - if isinstance(wdata.args, (list, tuple)): - args1 = tuple((wdata.args)) + (wdata.data,) + args - else: - args1 = tuple((wdata.args,)) + (wdata.data,) + args plotflag = kwds.pop('plotflag', None) if plotflag: - h1 = self._plot(plotflag, *args1, **kwds) + h1 = self._plot(plotflag, wdata, **kwds) else: + if isinstance(wdata.args, (list, tuple)): + args1 = tuple((wdata.args)) + (wdata.data,) + args + else: + args1 = tuple((wdata.args,)) + (wdata.data,) + args h1 = self.plotfun(*args1, **kwds) h2 = wdata.labels.labelfig() return h1, h2 - def _plot(self, plotflag, *args1, **kwds): - x = args1[0] - data = transformdata(x,args1[1], plotflag) + def _plot(self, plotflag, wdata, *args, **kwds): + x = wdata.args + data = transformdata(x, wdata.data, plotflag) dataCI = () - h1 = plot1d(x,data, dataCI, plotflag, *args1[2:], **kwds) + h1 = plot1d(x,data, dataCI, plotflag, *args, **kwds) return h1 -def plot1d(args,data,dataCI,plotflag,*varargin, **kwds): +def plot1d(args,data, dataCI,plotflag,*varargin, **kwds): plottype = np.mod(plotflag,10) if plottype==0: # % No plotting @@ -334,8 +335,60 @@ class Plotter_2d(Plotter_1d): plotmethod = 'contour' super(Plotter_2d, self).__init__(plotmethod) - def _plot(self,*args,**kwds): - pass + def _plot(self, plotflag, wdata, *args, **kwds): + h1 = plot2d(wdata, plotflag, *args, **kwds) + return h1 + +def plot2d(wdata, plotflag, *args, **kwds): + f = wdata + if plotflag in (1,6,7,8,9): + PL=0 + if hasattr(f,'cl') and len(f.cl)>0: # check if contour levels is submitted + CL = f.cl + if hasattr(f,'pl'): + PL = f.pl # levels defines quantile levels? 0=no 1=yes + else: + dmax = np.max(f.data) + dmin = np.min(f.data) + CL = dmax-(dmax-dmin)*(1-np.r_[0.01, 0.025, 0.05, 0.1, 0.2, 0.4, 0.5, 0.75]) + clvec = np.sort(CL) + + if plotflag in [1, 8, 9]: + h = plotbackend.contour(f.args,f.data,levels=CL); + #else: + # [cs hcs] = contour3(f.x{:},f.f,CL,sym); + + if plotflag in (1,6): + ncl = len(clvec) + if ncl>12: + ncl=12 + warnings.warn('Only the first 12 levels will be listed in table.') + axcl = cltext(clvec[:ncl], percent=PL) # print contour level text + elif any(plotflag==[7, 9]): + pass + #clabel(cs); + #else + #clabel(cs,hcs); + + elif plotflag== 2: + h = plotbackend.mesh(f.args,f.data) + elif plotflag==3: + h = plotbackend.surf(f.args,f.data); #shading interp % flat, faceted % surfc + elif plotflag==4: + h = plotbackend.waterfall(f.args,f.data); + elif plotflag==5: + h =plotbackend.pcolor(f.args,f.data); #%shading interp % flat, faceted + elif plotflag==10: + h = plotbackend.contourf(f.args,f.f); clabel(cs,hcs); + plotbackend.colorbar(h) + else: + raise ValueError('unknown option for plotflag') + + + #if any(plotflag==(2:5)) + # shading(shad); + #end + # pass def main():