source: issm/trunk-jpl/src/m/plot/checkplotoptions.py@ 23716

Last change on this file since 23716 was 23716, checked in by bdef, 6 years ago

CHG: shifting to py3 version of python interface (py2 compatible)

File size: 5.2 KB
Line 
1import numpy as np
2
3def checkplotoptions(md,options):
4 '''
5 CHECKPLOTOPTIONS - build a structure that holds all plot options
6
7 Usage:
8 options=checkplotoptions(md,options)
9
10 See also: PLOTMODEL
11
12 NOTE: not fully implemented yet
13 '''
14
15 # {{{ units
16 if options.exist('unit'):
17 if 'km' in options.getfieldvalue('unit','km'):
18 options.changefieldvalue('unit',10**-3)
19 elif '100km' in options.getfieldvalue('unit','100km'):
20 options.changefieldvalue('unit',10**-5)
21 # }}}
22 # {{{ density
23 if options.exist('density'):
24 density=options.getfieldvalue('density')
25 options.changefieldvalue('density',abs(ceil(density)))
26 # }}}
27 # {{{ show section
28 if options.exist('showsection'):
29 if 'on' in options.getfieldvalue('showsection','on'):
30 options.changefieldvalue('showsection',4)
31 # }}}
32 # {{{ smooth values
33 if options.exist('smooth'):
34 if 'on' in options.getfieldvalue('smooth','on'):
35 options.changefieldvalue('smooth',0)
36 # }}}
37 # {{{ contouronly values
38 if options.exist('contouronly'):
39 if 'on' in options.getfieldvalue('contouronly','on'):
40 options.changefieldvalue('contouronly',1)
41 # }}}
42 # {{{ colorbar
43 if options.exist('colorbar'):
44 if 'on' in options.getfieldvalue('colorbar','on'):
45 options.changefieldvalue('colorbar',1)
46 elif 'off' in options.getfieldvalue('colorbar','off'):
47 options.changefieldvalue('colorbar',0)
48 # }}}
49 # {{{ text
50 if options.exist('text'):
51 # text values (coerce to list for consistent functionality)
52 textlist=[]
53 text=options.getfieldvalue('text','default text')
54 textlist.extend([text] if isinstance(text,str) else text)
55 numtext=len(textlist)
56 # text position
57 textpos=options.getfieldvalue('textposition',[0.5,0.5])
58 if not isinstance(textpos,list):
59 raise Exception('textposition should be passed as a list')
60 if any(isinstance(i,list) for i in textpos):
61 textx=[item[0] for item in textpos]
62 texty=[item[1] for item in textpos]
63 else:
64 textx=[textpos[0]]
65 texty=[textpos[1]]
66 if len(textx)!=numtext or len(texty)!=numtext:
67 raise Exception('textposition should contain one list of x,y vertices for every text instance')
68
69 # font size
70 if options.exist('textfontsize'):
71 textfontsize=options.getfieldvalue('textfontsize',12)
72 sizelist=[]
73 sizelist.extend(textsize if isinstance(textfontsize,list) else [textfontsize])
74 else:
75 sizelist=[12]
76 if len(sizelist)==1:
77 sizelist=np.tile(sizelist,numtext)
78
79 # font color
80 if options.exist('textcolor'):
81 textcolor=options.getfieldvalue('textcolor','k')
82 colorlist=[]
83 colorlist.extend(textcolor if isinstance(textcolor,list) else [textcolor])
84 else:
85 colorlist=['k']
86 if len(colorlist)==1:
87 colorlist=np.tile(colorlist,numtext)
88
89 # textweight
90 if options.exist('textweight'):
91 textweight=options.getfieldvalue('textweight')
92 weightlist=[]
93 weightlist.extend(textweight if isinstance(textweight,list) else [textweight])
94 else:
95 weightlist=['normal']
96 if len(weightlist)==1:
97 weightlist=np.tile(weightlist,numtext)
98
99 # text rotation
100 if options.exist('textrotation'):
101 textrotation=options.getfieldvalue('textrotation',0)
102 rotationlist=[]
103 rotationlist.extend(textrotation if isinstance(textrotation,list) else [textrotation])
104 else:
105 rotationlist=[0]
106 if len(rotationlist)==1:
107 rotationlist=np.tile(rotationlist,numtext)
108
109 options.changefieldvalue('text',textlist)
110 options.addfield('textx',textx)
111 options.addfield('texty',texty)
112 options.changefieldvalue('textfontsize',sizelist)
113 options.changefieldvalue('textcolor',colorlist)
114 options.changefieldvalue('textweight',weightlist)
115 options.changefieldvalue('textrotation',rotationlist)
116 # }}}
117 # {{{ expdisp
118 expdispvaluesarray=[]
119 expstylevaluesarray=[]
120 expstylevalues=[]
121 if options.exist('expstyle'):
122 expstylevalues=options.getfieldvalue('expstyle')
123 if type(expstylevalues)==str:
124 expstylevalues=[expstylevalues]
125 if options.exist('expdisp'):
126 expdispvalues=options.getfieldvalue('expdisp')
127 if type(expdispvalues)==str:
128 expdispvalues=[expdispvalues]
129 for i in np.arange(len(expdispvalues)):
130 expdispvaluesarray.append(expdispvalues[i])
131 if len(expstylevalues)>i:
132 expstylevaluesarray.append(expstylevalues[i])
133 else:
134 expstylevaluesarray.append('-k')
135 options.changefieldvalue('expstyle',expstylevaluesarray)
136 options.changefieldvalue('expdisp',expdispvaluesarray)
137 # }}}
138 # {{{ latlonnumbering
139 if options.exist('latlonclick'):
140 if 'on' in options.getfieldvalue('latlonclick','on'):
141 options.changefieldvalue('latlonclick',1)
142 # }}}
143 # {{{ northarrow
144 if options.exist('northarrow'):
145 if 'on' in options.getfieldvalue('northarrow','on'):
146 #default values
147 Lx=max(md.mesh.x)-min(md.mesh.x)
148 Ly=max(md.mesh.y)-min(md.mesh.y)
149 options.changefieldvalue('northarrow',[min(md.mesh.x)+1./6.*Lx, min(md.mesh.y)+5./6.*Ly, 1./15.*Ly, 0.25, 1./250.*Ly])
150 # }}}
151 # {{{ scale ruler
152 if options.exist('scaleruler'):
153 if 'on' in options.getfieldvalue('scaleruler','off'):
154 Lx=max(md.mesh.x)-min(md.mesh.x)
155 Ly=max(md.mesh.y)-min(md.mesh.y)
156 options.changefieldvalue('scaleruler',[min(md.mesh.x)+6./8.*Lx, min(md.mesh.y)+1./10.*Ly, 10**(np.ceil(np.log10(Lx)))/5, np.floor(Lx/100), 5])
157 # }}}
158 # {{{ log scale
159 if options.exist('log'):
160 options.changefieldvalue('cutoff',np.log10(options.getfieldvalue('cutoff',1.5))/np.log10(options.getfieldvalue('log')))
161 # }}}
162 return options
Note: See TracBrowser for help on using the repository browser.