Fixed a bug in LevelCrossings.trdata

Added plotflag to Plotter_1d and WafoData.
Otherwise small cosmetic fixes
master
per.andreas.brodtkorb 14 years ago
parent 5704928b44
commit 843ddb90c4

@ -2,6 +2,7 @@
from info import __doc__
import misc
import data
import demos
import kdetools
import objects
import spectrum

@ -179,7 +179,8 @@ class LevelCrossings(WafoData):
L0 = vstack((L0, r1 * L0 + sqrt(1 - r2 ** 2) * randn(1)))
#%Simulate the process, starting in L0
lfilter = scipy.signal.lfilter
L = lfilter(1, [1, a1, a2], e, lfilter([1, a1, a2], 1, L0))
# TODO: lfilter crashes the example
L = lfilter(ones(1), [1, a1, a2], e, lfilter([1, a1, a2], ones(1), L0))
epsilon = 1.01
min_L = min(L)
@ -322,20 +323,20 @@ class LevelCrossings(WafoData):
>>> int(S.tr.dist2gauss()*100)
141
>>> int(g0emp.dist2gauss()*100)
1544
380995
>>> int(g0.dist2gauss()*100)
340
143
>>> int(g1.dist2gauss()*100)
352
162
>>> int(g2.dist2gauss()*100)
365
120
hold on, trplot(g1,g) # Check the fit
trplot(g2)
g0.plot() # Check the fit.
See also troptset, dat2tr, trplot, findcross, smooth
See also
troptset, dat2tr, trplot, findcross, smooth
NB! the transformated data will be N(0,1)
NB! the transformated data will be N(0,1)
Reference
---------
@ -346,21 +347,13 @@ class LevelCrossings(WafoData):
Vol 10, pp 13--47
'''
# Tested on: Matlab 5.3, 5.2, 5.1
# History:
# by pab 29.12.2000
# based on lc2tr, but the inversion is faster.
# by IR and PJ
if mean is None:
mean = self.mean
if sigma is None:
sigma = self.stdev
opt = DotDict(chkder=True, plotflag=False, csm=0.9, gsm=.05,
param=(-5, 5, 513), delay=2, linextrap=True, ntr=inf, ne=7, cvar=1, gvar=1)
# If just 'defaults' passed in, return the default options in g
param=(-5, 5, 513), delay=2, linextrap=True, ntr=10000, ne=7, gvar=1)
opt.update(options)
param = opt.param
Ne = opt.ne
@ -381,20 +374,10 @@ class LevelCrossings(WafoData):
else:
gvar = interp1d(linspace(0, 1, ng) , opt.gvar, kind='linear')(linspace(0, 1, ncr))
ng = len(atleast_1d(opt.cvar))
if ng == 1:
cvar = opt.cvar * ones(ncr)
else:
cvar = interp1d(linspace(0, 1, ng), opt.cvar, kind='linear')(linspace(0, 1, ncr))
uu = linspace(*param)
g1 = sigma * uu + mean
g22 = lc2.copy()
if Ner > 0: # Compute correction factors
cor1 = trapz(lc2[0:Ner + 1], lc1[0:Ner + 1])
cor2 = trapz(lc2[-Ner - 1::], lc1[-Ner - 1::])
@ -402,27 +385,11 @@ class LevelCrossings(WafoData):
cor1 = 0
cor2 = 0
lc22 = hstack((0, cumtrapz(lc2, lc1) + cor1))
lc22 = (lc22 + 0.5) / (lc22[-1] + cor2 + 1)
lc11 = (lc1 - mean) / sigma
# find the mode
imin = abs(lc22 - 0.15).argmin()
imax = abs(lc22 - 0.85).argmin()
inde = slice(imin, imax + 1)
lc222 = SmoothSpline(lc11[inde], g22[inde], opt.csm, opt.linextrap, cvar[inde])(lc11[inde])
#tmp = smooth(cros(inde,1),g2(inde,2),opt.csm,cros(inde,1),def,cvar(inde));
imax = lc222.argmax()
u0 = lc22[inde][imax]
#u0 = interp1q(cros(:,2),cros(:,1),.5)
#lc22 = ndtri(lc22) - u0 #
lc22 = invnorm(lc22) - u0
lc22 = invnorm(lc22) #- ymean
g2 = TrData(lc22.copy(), lc1.copy(), mean=mean, sigma=sigma)
g2.setplotter('step')
@ -432,9 +399,9 @@ class LevelCrossings(WafoData):
# to be linear outside the edges or choosing a lower value for csm2.
inds = slice(Ne, ncr - Ne) # indices to points we are smoothing over
scros2 = SmoothSpline(lc11[inds], lc22[inds], opt.gsm, opt.linextrap, gvar[inds])(uu)
slc22 = SmoothSpline(lc11[inds], lc22[inds], opt.gsm, opt.linextrap, gvar[inds])(uu)
g = TrData(scros2, g1, mean=mean, sigma=sigma) #*sa; #multiply with stdev
g = TrData(slc22.copy(), g1.copy(), mean=mean, sigma=sigma) #*sa; #multiply with stdev
if opt.chkder:
for ix in range(5):
@ -739,7 +706,7 @@ class TimeSeries(WafoData):
>>> h = rf.plot()
>>> S = ts.tospecdata()
The default L is set to 68
The default L is set to 325
>>> tp = ts.turning_points()
>>> mm = tp.cycle_pairs()
@ -1215,29 +1182,20 @@ class TimeSeries(WafoData):
>>> g1, g1emp = ts.trdata(method='m', gvar=0.5 ) # Equal weight on all points
>>> g2, g2emp = ts.trdata(method='n', gvar=[3.5, 0.5, 3.5]) # Less weight on the ends
>>> int(S.tr.dist2gauss()*100)
593
141
>>> int(g0emp.dist2gauss()*100)
439
217949
>>> int(g0.dist2gauss()*100)
432
93
>>> int(g1.dist2gauss()*100)
234
66
>>> int(g2.dist2gauss()*100)
437
Hm0 = 7;
S = jonswap([],Hm0); g=ochitr([],[Hm0/4]);
S.tr=g;S.tr(:,2)=g(:,2)*Hm0/4;
xs = spec2sdat(S,2^13);
g0 = dat2tr(xs,[],'plot','iter'); % Monitor the development
g1 = dat2tr(xs,'mnon','gvar', .5 ); % More weight on all points
g2 = dat2tr(xs,'nonl','gvar', [3.5 .5 3.5]); % Less weight on the ends
hold on, trplot(g1,g) % Check the fit
trplot(g2)
84
See also
--------
troptset, lc2tr, cdf2tr, trplot
LevelCrossings.trdata
wafo.transform.models
References
----------
@ -1259,7 +1217,7 @@ class TimeSeries(WafoData):
# 'cvar',1,'gvar',1,'multip',0);
opt = DotDict(chkder=True, plotflag=False, csm=.95, gsm=.05,
param=[-5, 5, 513], delay=2, ntr=inf, linextrap=True, ne=7, cvar=1, gvar=1,
param=[-5, 5, 513], delay=2, ntr=1000, linextrap=True, ne=7, cvar=1, gvar=1,
multip=False, crossdef='uM')
opt.update(**options)

@ -97,9 +97,10 @@ def _gengamspec(wn, N=5, M=4):
Examples
--------
>>> import wafo.spectrum.models as wsm
>>> import numpy as np
>>> wn = np.linspace(0,4,5)
>>> _gengamspec(wn, N=6, M=2)
>>> wsm._gengamspec(wn, N=6, M=2)
array([ 0. , 1.16765216, 0.17309961, 0.02305179, 0.00474686])
See also
@ -232,7 +233,8 @@ class Bretschneider(ModelSpectrum):
Examples
--------
>>> S = Bretschneider(Hm0=6.5,Tp=10)
>>> import wafo.spectrum.models as wsm
>>> S = wsm.Bretschneider(Hm0=6.5,Tp=10)
>>> S((0,1,2,3))
array([ 0. , 1.69350993, 0.06352698, 0.00844783])
@ -289,21 +291,22 @@ def jonswap_peakfact(Hm0, Tp):
Examples
--------
>>> import wafo.spectrum.models as wsm
>>> import pylab as plb
>>> Tp,Hs = plb.meshgrid(range(4,8),range(2,6))
>>> gam = jonswap_peakfact(Hs,Tp)
>>> gam = wsm.jonswap_peakfact(Hs,Tp)
>>> Hm0 = plb.linspace(1,20)
>>> Tp = Hm0
>>> [T,H] = plb.meshgrid(Tp,Hm0)
>>> gam = jonswap_peakfact(H,T)
>>> gam = wsm.jonswap_peakfact(H,T)
>>> v = plb.arange(0,8)
>>> h = plb.contourf(Tp,Hm0,gam,v);h=plb.colorbar()
>>> Hm0 = plb.arange(1,11)
>>> Tp = plb.linspace(2,16)
>>> T,H = plb.meshgrid(Tp,Hm0)
>>> gam = jonswap_peakfact(H,T)
>>> gam = wsm.jonswap_peakfact(H,T)
>>> h = plb.plot(Tp,gam.T)
>>> h = plb.xlabel('Tp [s]')
>>> h = plb.ylabel('Peakedness parameter')
@ -356,8 +359,9 @@ def jonswap_seastate(u10, fetch=150000., method='lewis', g=9.81, output='dict'):
Example
--------
>>> import wafo.spectrum.models as wsm
>>> fetch = 10000; u10 = 10
>>> ss = jonswap_seastate(u10, fetch, output='dict')
>>> ss = wsm.jonswap_seastate(u10, fetch, output='dict')
>>> ss
{'Ag': 0.016257903375341734,
'Hm0': 0.51083679198275533,
@ -365,13 +369,13 @@ def jonswap_seastate(u10, fetch=150000., method='lewis', g=9.81, output='dict'):
'gamma': 2.4824142635861119,
'sigmaA': 0.075317331395172021,
'sigmaB': 0.091912084512251344}
>>> S = Jonswap(**ss)
>>> S = wsm.Jonswap(**ss)
>>> S.Hm0
0.51083679198275533
# Alternatively
>>> ss1 = jonswap_seastate(u10, fetch, output='list')
>>> S1 = Jonswap(*ss1)
>>> ss1 = wsm.jonswap_seastate(u10, fetch, output='list')
>>> S1 = wsm.Jonswap(*ss1)
>>> S1.Hm0
0.51083679198275533
@ -484,12 +488,14 @@ class Jonswap(ModelSpectrum):
Examples
---------
>>> import pylab as plb
>>> S = Jonswap(Hm0=7, Tp=11,gamma=1)
>>> import wafo.spectrum.models as wsm
>>> S = wsm.Jonswap(Hm0=7, Tp=11,gamma=1)
>>> w = plb.linspace(0,5)
>>> h = plb.plot(w,S(w))
>>> S2 = Bretschneider(Hm0=7, Tp=11)
>>> assert(all(abs(S(w)-S2(w))<1.e-7),'JONSWAP with gamma=1 differs from Bretscneider, should be equal!')
>>> S2 = wsm.Bretschneider(Hm0=7, Tp=11)
>>> all(abs(S(w)-S2(w))<1.e-7)
True
>>> plb.close('all')
See also
@ -652,10 +658,10 @@ def phi1(wi, h, g=9.81):
Example:
-------
Transform a JONSWAP spectrum to a spectrum for waterdepth = 30 m
>>> S = Jonswap()
>>> import wafo.spectrum.models as wsm
>>> S = wsm.Jonswap()
>>> w = range(3.0)
>>> S(w)*phi1(w,30.0)
>>> S(w)*wsm.phi1(w,30.0)
array([ 0. , 1.0358056 , 0.03796281])
@ -723,9 +729,10 @@ class Tmaspec(Jonswap):
Example
--------
>>> import wafo.spectrum.models as wsm
>>> import pylab as plb
>>> w = plb.linspace(0,2.5)
>>> S = Tmaspec(h=10,gamma=1) # Bretschneider spectrum Hm0=7, Tp=11
>>> S = wsm.Tmaspec(h=10,gamma=1) # Bretschneider spectrum Hm0=7, Tp=11
>>> o=plb.plot(w,S(w))
>>> o=plb.plot(w,S(w,h=21))
>>> o=plb.plot(w,S(w,h=42))
@ -812,9 +819,10 @@ class Torsethaugen(ModelSpectrum):
Example
-------
>>> import wafo.spectrum.models as wsm
>>> import pylab as plb
>>> w = plb.linspace(0,4)
>>> S = Torsethaugen(Hm0=6, Tp=8)
>>> S = wsm.Torsethaugen(Hm0=6, Tp=8)
>>> h=plb.plot(w,S(w),w,S.wind(w),w,S.swell(w))
See also
@ -1034,7 +1042,8 @@ class McCormick(Bretschneider):
Example:
--------
>>> S = McCormick(Hm0=6.5,Tp=10)
>>> import wafo.spectrum.models as wsm
>>> S = wsm.McCormick(Hm0=6.5,Tp=10)
>>> S(range(4))
array([ 0. , 1.87865908, 0.15050447, 0.02994663])
@ -1107,7 +1116,8 @@ class OchiHubble(ModelSpectrum):
Examples
--------
>>> S = OchiHubble(par=2)
>>> import wafo.spectrum.models as wsm
>>> S = wsm.OchiHubble(par=2)
>>> S(range(4))
array([ 0. , 0.90155636, 0.04185445, 0.00583207])
@ -1239,7 +1249,8 @@ class Wallop(Bretschneider):
Example:
--------
>>> S = Wallop(Hm0=6.5, Tp=10)
>>> import wafo.spectrum.models as wsm
>>> S = wsm.Wallop(Hm0=6.5, Tp=10)
>>> S(range(4))
array([ 0.00000000e+00, 9.36921871e-01, 2.76991078e-03,
7.72996150e-05])
@ -1360,8 +1371,9 @@ class Spreading(object):
Examples
--------
>>> import wafo.spectrum.models as wsm
>>> import pylab as plb
>>> D = Spreading('cos2s',s_a=10.0)
>>> D = wsm.Spreading('cos2s',s_a=10.0)
>>> w = plb.linspace(0,3,257)
>>> theta = plb.linspace(-pi,pi,129)
@ -1369,13 +1381,13 @@ class Spreading(object):
# Make frequency dependent direction
>>> theta0 = lambda w: w*plb.pi/6.0
>>> D2 = Spreading('cos2s',theta0=theta0)
>>> D2 = wsm.Spreading('cos2s',theta0=theta0)
>>> t = plb.contour(D2(theta,w)[0])
# Plot all spreading functions
>>> alltypes = ('cos2s','box','mises','poisson','sech2','wrap_norm')
>>> for ix in range(len(alltypes)):
... D3 = Spreading(alltypes[ix])
... D3 = wsm.Spreading(alltypes[ix])
... t = plb.figure(ix)
... t = plb.contour(D3(theta,w)[0])
... t = plb.title(alltypes[ix])
@ -1927,10 +1939,11 @@ class Spreading(object):
Example
-------
>>> S = Jonswap().tospecdata()
>>> D = Spreading('cos2s')
>>> import wafo.spectrum.models as wsm
>>> S = wsm.Jonswap().tospecdata()
>>> D = wsm.Spreading('cos2s')
>>> SD = D.tospecdata2d(S)
>>> SD.plot()
>>> h = SD.plot()
See also spreading, rotspec, jonswap, torsethaugen
'''

@ -837,9 +837,10 @@ class FitDistribution(rv_frozen):
plotbackend.subplot(2, 2, 2)
self.plotepdf()
plotbackend.subplot(2, 2, 3)
self.plotresprb()
plotbackend.subplot(2, 2, 4)
self.plotresq()
plotbackend.subplot(2, 2, 4)
self.plotresprb()
fixstr = ''
if not self.par_fix == None:
numfix = len(self.i_fixed)

@ -145,15 +145,16 @@ class TrData(WafoData, TrCommon):
-------
Construct a linear transformation model
>>> import numpy as np
>>> import wafo.transorm as wt
>>> sigma = 5; mean = 1
>>> u = np.linspace(-5,5); x = sigma*u+mean; y = u
>>> g = TrData(y,x)
>>> g = wt.TrData(y,x)
>>> g.mean
array([ 1.])
>>> g.sigma
array([ 5.])
>>> g = TrData(y,x,mean=1,sigma=5)
>>> g = wt.TrData(y,x,mean=1,sigma=5)
>>> g.mean
1
>>> g.sigma

@ -26,19 +26,20 @@ from core import TrCommon, TrData
__all__ = ['TrHermite', 'TrLinear', 'TrOchi']
_example = '''
>>> import numpy as np
>>> import wafo.spectrum.models as sm
>>> import wafo.transform.models as tm
>>> std = 7./4
>>> g = <generic>(sigma=std, ysigma=std)
>>> g = tm.<generic>(sigma=std, ysigma=std)
Simulate a Transformed Gaussian process:
>>> import numpy as np
>>> import wafo.spectrum.models as sm
>>> Sj = sm.Jonswap(Hm0=4*std, Tp=11)
>>> w = np.linspace(0,4,256)
>>> S = Sj.tospecdata(w) #Make spectrum object from numerical values
>>> S = Sj.tospecdata(w) # Make spectrum object from numerical values
>>> ys = S.sim(ns=15000) # Simulated in the Gaussian world
>>> me, va, sk, ku = S.stats_nl(moments='mvsk')
>>> g2 = <generic>(mean=me, var=va, skew=sk, kurt=ku, ysigma=std)
>>> g2 = tm.<generic>(mean=me, var=va, skew=sk, kurt=ku, ysigma=std)
>>> xs = g2.gauss2dat(ys[:,1:]) # Transformed to the real world
'''
class TrCommon2(TrCommon):
@ -111,7 +112,9 @@ class TrHermite(TrCommon2):
--------
""" + _example.replace('<generic>', 'TrHermite') + """
>>> g.dist2gauss()
3.9858776379926808
0.88230868748851499
>>> g2.dist2gauss()
1.1411663205144991
See also
--------
@ -337,6 +340,8 @@ class TrLinear(TrCommon2):
""" + _example.replace('<generic>', 'TrLinear') + """
>>> g.dist2gauss()
0.0
>>> g2.dist2gauss()
3.8594770921678001e-31
See also
--------
@ -399,7 +404,9 @@ class TrOchi(TrCommon2):
-------
""" + _example.replace('<generic>', 'TrOchi') + """
>>> g.dist2gauss()
5.9322684525265501
1.410698801056657
>>> g2.dist2gauss()
1.988807188766706
See also
--------
@ -486,7 +493,8 @@ class TrOchi(TrCommon2):
mean = self.mean
sigma = self.sigma
xn = atleast_1d(x)
xn = (xn - mean) / sigma
shape0 = xn.shape
xn = (xn.ravel() - mean) / sigma
igp, = where(0 <= xn)
igm, = where(xn < 0)
@ -498,6 +506,7 @@ class TrOchi(TrCommon2):
if gb != 0:
np.put(g, igm, (-expm1(-gb * xn[igm])) / gb)
g.shape = shape0
return (g - mean2) * self.ysigma / sigma2 + self.ymean
def _gauss2dat(self, y, *yi):
@ -509,7 +518,7 @@ class TrOchi(TrCommon2):
sigma = self.sigma
yn = (atleast_1d(y) - self.ymean) / self.ysigma
xn = sigma2 * yn + mean2
xn = sigma2 * yn.ravel() + mean2
igp, = where(0 <= xn)
igm, = where(xn < 0)
@ -520,6 +529,7 @@ class TrOchi(TrCommon2):
if gb != 0:
np.put(xn, igm, -log1p(-gb * xn[igm]) / gb)
xn.shape = yn.shape
return sigma * xn + mean
def main():

@ -2,6 +2,7 @@ import warnings
from plotbackend import plotbackend
from time import gmtime, strftime
import numpy as np
from scipy.integrate.quadrature import cumtrapz #@UnresolvedImport
__all__ = ['WafoData', 'AxisLabels']
@ -66,19 +67,21 @@ class WafoData(object):
self.data = data
self.args = args
self.date = now()
self.plotter = None
self.plotter = kwds.pop('plotter', None)
self.children = None
self.plot_args_children = kwds.get('plot_args_children',[])
self.plot_kwds_children = kwds.get('plot_kwds_children',{})
self.plot_args = kwds.get('plot_args',[])
self.plot_kwds = kwds.get('plot_kwds',{})
self.plot_args_children = kwds.pop('plot_args_children',[])
self.plot_kwds_children = kwds.pop('plot_kwds_children',{})
self.plot_args = kwds.pop('plot_args',[])
self.plot_kwds = kwds.pop('plot_kwds',{})
self.labels = AxisLabels(**kwds)
self.setplotter()
if not self.plotter:
self.setplotter()
def plot(self, *args, **kwds):
tmp = None
if self.children != None:
plotflag = kwds.get('plotflag', None)
if not plotflag and self.children != None:
plotbackend.hold('on')
tmp = []
child_args = args if len(args) else tuple(self.plot_args_children)
@ -106,12 +109,10 @@ class WafoData(object):
newcopy.__dict__.update(self.__dict__)
return newcopy
def setplotter(self, plotmethod=None):
'''
Set plotter based on the data type data_1d, data_2d, data_3d or data_nd
'''
if isinstance(self.args, (list, tuple)): # Multidimensional data
ndim = len(self.args)
if ndim < 2:
@ -140,10 +141,6 @@ class AxisLabels:
newcopy = empty_copy(self)
newcopy.__dict__.update(self.__dict__)
return newcopy
#lbkwds = self.labels.__dict__.copy()
#labels = AxisLabels(**lbkwds)
#return labels
def labelfig(self):
try:
h1 = plotbackend.title(self.title)
@ -178,7 +175,6 @@ class Plotter_1d(object):
plotmethod = 'plot'
self.plotbackend = plotbackend
try:
#self.plotfun = plotbackend.__dict__[plotmethod]
self.plotfun = getattr(plotbackend, plotmethod)
except:
pass
@ -190,10 +186,137 @@ class Plotter_1d(object):
args1 = tuple((wdata.args)) + (wdata.data,) + args
else:
args1 = tuple((wdata.args,)) + (wdata.data,) + args
h1 = self.plotfun(*args1, **kwds)
plotflag = kwds.pop('plotflag', None)
if plotflag:
h1 = self._plot(plotflag, *args1, **kwds)
else:
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)
dataCI = ()
h1 = plot1d(x,data, dataCI, plotflag, *args1[2:], **kwds)
return h1
def plot1d(args,data,dataCI,plotflag,*varargin, **kwds):
plottype = np.mod(plotflag,10)
if plottype==0: # % No plotting
return []
elif plottype==1:
H = plotbackend.plot(args,data,*varargin, **kwds)
elif plottype==2:
H = plotbackend.step(args,data,*varargin, **kwds)
elif plottype==3:
H = plotbackend.stem(args,data,*varargin, **kwds)
elif plottype==4:
H = plotbackend.errorbar(args,data,dataCI[:,0]-data,dataCI[:,1]-data,*varargin, **kwds)
elif plottype==5:
H = plotbackend.bar(args,data,*varargin, **kwds)
elif plottype==6:
level = 0
if np.isfinite(level):
H = plotbackend.fill_between(args,data,level,*varargin, **kwds);
else:
H = plotbackend.fill_between(args,data,*varargin, **kwds);
scale = plotscale(plotflag);
logXscale = any(scale=='x');
logYscale = any(scale=='y');
logZscale = any(scale=='z');
ax = plotbackend.gca()
if logXscale:
plotbackend.setp(ax,xscale='log')
if logYscale:
plotbackend.setp(ax,yscale='log')
if logZscale:
plotbackend.setp(ax,zscale='log')
transFlag = np.mod(plotflag//10,10)
logScale = logXscale or logYscale or logZscale
if logScale or (transFlag ==5 and not logScale):
ax = list(plotbackend.axis())
fmax1 = data.max()
if transFlag==5 and not logScale:
ax[3] = 11*np.log10(fmax1)
ax[2] = ax[3]-40
else:
ax[3] = 1.15*fmax1;
ax[2] = ax[3]*1e-4;
plotbackend.axis(ax)
if dataCI and plottype < 3:
plotbackend.hold('on')
plot1d(args,dataCI,(),plotflag,'r--');
return H
def plotscale(plotflag):
'''
Return plotscale from plotflag
CALL scale = plotscale(plotflag)
plotflag = integer defining plotscale.
Let scaleId = floor(plotflag/100).
If scaleId < 8 then:
0 'linear' : Linear scale on all axes.
1 'xlog' : Log scale on x-axis.
2 'ylog' : Log scale on y-axis.
3 'xylog' : Log scale on xy-axis.
4 'zlog' : Log scale on z-axis.
5 'xzlog' : Log scale on xz-axis.
6 'yzlog' : Log scale on yz-axis.
7 'xyzlog' : Log scale on xyz-axis.
otherwise
if (mod(scaleId,10)>0) : Log scale on x-axis.
if (mod(floor(scaleId/10),10)>0) : Log scale on y-axis.
if (mod(floor(scaleId/100),10)>0) : Log scale on z-axis.
scale = string defining plotscale valid options are:
'linear', 'xlog', 'ylog', 'xylog', 'zlog', 'xzlog',
'yzlog', 'xyzlog'
Example
plotscale(100) % xlog
plotscale(200) % xlog
plotscale(1000) % ylog
See also plotscale
'''
scaleId = plotflag//100
if scaleId>7:
logXscaleId = np.mod(scaleId,10)>0
logYscaleId = (np.mod(scaleId//10, 10)>0)*2
logZscaleId = (np.mod(scaleId//100, 10)>0)*4
scaleId = logYscaleId +logXscaleId+logZscaleId
scales = ['linear','xlog','ylog','xylog','zlog','xzlog','yzlog','xyzlog']
return scales[scaleId]
def transformdata(x,f,plotflag):
transFlag = np.mod(plotflag//10,10)
if transFlag==0:
data = f
elif transFlag==1:
data = 1-f
elif transFlag==2:
data = cumtrapz(f,x)
elif transFlag==3:
data = 1-cumtrapz(f,x)
if transFlag in (4,5):
if transFlag==4:
data = -np.log1p(-cumtrapz(f,x))
else:
if any(f<0):
raise ValueError('Invalid plotflag: Data or dataCI is negative, but must be positive')
data = 10*np.log10(f)
return data
class Plotter_2d(Plotter_1d):
"""
Parameters
@ -201,6 +324,7 @@ class Plotter_2d(Plotter_1d):
plotmethod : string
defining type of plot. Options are:
contour (default)
contourf
mesh
surf
"""
@ -209,7 +333,9 @@ class Plotter_2d(Plotter_1d):
if plotmethod is None:
plotmethod = 'contour'
super(Plotter_2d, self).__init__(plotmethod)
#self.plotfun = plotbackend.__dict__[plotmethod]
def _plot(self,*args,**kwds):
pass
def main():

Loading…
Cancel
Save