[21341] | 1 | import numpy as np
|
---|
[17806] | 2 | from cmaptools import truncate_colormap
|
---|
| 3 | from plot_contour import plot_contour
|
---|
[20500] | 4 | from plot_streamlines import plot_streamlines
|
---|
| 5 | from expdisp import expdisp
|
---|
[17806] | 6 |
|
---|
[13771] | 7 | try:
|
---|
[16137] | 8 | from matplotlib.ticker import MaxNLocator
|
---|
[17806] | 9 | from mpl_toolkits.axes_grid1 import make_axes_locatable
|
---|
[20500] | 10 | from mpl_toolkits.mplot3d import Axes3D
|
---|
[17806] | 11 | import matplotlib as mpl
|
---|
[13771] | 12 | import pylab as p
|
---|
[17806] | 13 | import matplotlib.pyplot as plt
|
---|
[13771] | 14 | except ImportError:
|
---|
| 15 | print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
|
---|
| 16 |
|
---|
[17806] | 17 | def applyoptions(md,data,options,fig,ax):
|
---|
[13417] | 18 | '''
|
---|
| 19 | APPLYOPTIONS - apply options to current plot
|
---|
| 20 |
|
---|
[17806] | 21 | 'plotobj' is the object returned by the specific plot call used to
|
---|
| 22 | render the data. This object is used for adding a colorbar.
|
---|
| 23 |
|
---|
[13417] | 24 | Usage:
|
---|
| 25 | applyoptions(md,data,options)
|
---|
| 26 |
|
---|
| 27 | See also: PLOTMODEL, PARSE_OPTIONS
|
---|
| 28 | '''
|
---|
| 29 |
|
---|
[17806] | 30 | # get handle to current figure and axes instance
|
---|
| 31 | #fig = p.gcf()
|
---|
| 32 | #ax=p.gca()
|
---|
| 33 |
|
---|
[21341] | 34 | # {{{ font
|
---|
[17806] | 35 | fontsize=options.getfieldvalue('fontsize',8)
|
---|
[13417] | 36 | fontweight=options.getfieldvalue('fontweight','normal')
|
---|
| 37 | fontfamily=options.getfieldvalue('fontfamily','sans-serif')
|
---|
[21341] | 38 | font={'fontsize' :fontsize,
|
---|
| 39 | 'fontweight' :fontweight,
|
---|
| 40 | 'family' :fontfamily}
|
---|
| 41 | # }}}
|
---|
| 42 | # {{{ title
|
---|
[13417] | 43 | if options.exist('title'):
|
---|
| 44 | title=options.getfieldvalue('title')
|
---|
| 45 | if options.exist('titlefontsize'):
|
---|
| 46 | titlefontsize=options.getfieldvalue('titlefontsize')
|
---|
| 47 | else:
|
---|
| 48 | titlefontsize=fontsize
|
---|
| 49 | if options.exist('titlefontweight'):
|
---|
| 50 | titlefontweight=options.getfieldvalue('titlefontweight')
|
---|
| 51 | else:
|
---|
| 52 | titlefontweight=fontweight
|
---|
| 53 | #title font
|
---|
| 54 | titlefont=font.copy()
|
---|
| 55 | titlefont['size']=titlefontsize
|
---|
| 56 | titlefont['weight']=titlefontweight
|
---|
[17989] | 57 | ax.set_title(title,**titlefont)
|
---|
[21341] | 58 | # }}}
|
---|
| 59 | # {{{ xlabel, ylabel, zlabel
|
---|
[13417] | 60 | if options.exist('labelfontsize'):
|
---|
| 61 | labelfontsize=options.getfieldvalue('labelfontsize')
|
---|
| 62 | else:
|
---|
| 63 | labelfontsize=fontsize
|
---|
| 64 | if options.exist('labelfontweight'):
|
---|
| 65 | labelfontweight=options.getfieldvalue('labelfontweight')
|
---|
| 66 | else:
|
---|
| 67 | labelfontweight=fontweight
|
---|
| 68 |
|
---|
| 69 | #font dict for labels
|
---|
| 70 | labelfont=font.copy()
|
---|
| 71 | labelfont['fontsize']=labelfontsize
|
---|
| 72 | labelfont['fontweight']=labelfontweight
|
---|
| 73 |
|
---|
| 74 | if options.exist('xlabel'):
|
---|
[17806] | 75 | ax.set_xlabel(options.getfieldvalue('xlabel'),**labelfont)
|
---|
[13417] | 76 | if options.exist('ylabel'):
|
---|
[17806] | 77 | ax.set_ylabel(options.getfieldvalue('ylabel'),**labelfont)
|
---|
[13417] | 78 | if options.exist('zlabel'):
|
---|
[17806] | 79 | ax.set_zlabel(options.getfieldvalue('zlabel'),**labelfont)
|
---|
[21341] | 80 | # }}}
|
---|
| 81 | # {{{ xticks, yticks, zticks (tick locations)
|
---|
[13424] | 82 | if options.exist('xticks'):
|
---|
| 83 | if options.exist('xticklabels'):
|
---|
| 84 | xticklabels=options.getfieldvalue('xticklabels')
|
---|
[17806] | 85 | ax.set_xticks(options.getfieldvalue('xticks'),xticklabels)
|
---|
[13424] | 86 | else:
|
---|
[17806] | 87 | ax.set_xticks(options.getfieldvalue('xticks'))
|
---|
[13424] | 88 | if options.exist('yticks'):
|
---|
| 89 | if options.exist('yticklabels'):
|
---|
| 90 | yticklabels=options.getfieldvalue('yticklabels')
|
---|
[17806] | 91 | ax.set_yticks(options.getfieldvalue('yticks'),yticklabels)
|
---|
[13424] | 92 | else:
|
---|
[17806] | 93 | ax.set_yticks(options.getfieldvalue('yticks'))
|
---|
[13424] | 94 | if options.exist('zticks'):
|
---|
| 95 | if options.exist('zticklabels'):
|
---|
| 96 | zticklabels=options.getfieldvalue('zticklabels')
|
---|
[17806] | 97 | ax.set_zticks(options.getfieldvalue('zticks'),zticklabels)
|
---|
[13424] | 98 | else:
|
---|
[17806] | 99 | ax.set_zticks(options.getfieldvalue('zticks'))
|
---|
[21341] | 100 | # }}}
|
---|
| 101 | # {{{ xticklabels,yticklabels,zticklabels
|
---|
[17989] | 102 | if options.getfieldvalue('ticklabels','off')=='off' or options.getfieldvalue('ticklabels',0)==0:
|
---|
| 103 | options.addfielddefault('xticklabels',[])
|
---|
| 104 | options.addfielddefault('yticklabels',[])
|
---|
| 105 | # TODO check if ax has a z-axis (e.g. is 3D)
|
---|
[13424] | 106 | if options.exist('xticklabels'):
|
---|
| 107 | xticklabels=options.getfieldvalue('xticklabels')
|
---|
[17989] | 108 | ax.set_xticklabels(xticklabels)
|
---|
[13424] | 109 | if options.exist('yticklabels'):
|
---|
| 110 | yticklabels=options.getfieldvalue('yticklabels')
|
---|
[17989] | 111 | ax.set_yticklabels(yticklabels)
|
---|
[13424] | 112 | if options.exist('zticklabels'):
|
---|
| 113 | zticklabels=options.getfieldvalue('zticklabels')
|
---|
[17989] | 114 | ax.set_zticklabels(zticklabels)
|
---|
[21341] | 115 | # }}}
|
---|
| 116 | # {{{ ticklabel notation
|
---|
[17806] | 117 | #ax.ticklabel_format(style='sci',scilimits=(0,0))
|
---|
[21341] | 118 | # }}}
|
---|
| 119 | # {{{ ticklabelfontsize
|
---|
[13424] | 120 | if options.exist('ticklabelfontsize'):
|
---|
| 121 | for label in ax.get_xticklabels() + ax.get_yticklabels():
|
---|
| 122 | label.set_fontsize(options.getfieldvalue('ticklabelfontsize'))
|
---|
| 123 | if int(md.mesh.dimension)==3:
|
---|
| 124 | for label in ax.get_zticklabels():
|
---|
| 125 | label.set_fontsize(options.getfieldvalue('ticklabelfontsize'))
|
---|
[21341] | 126 | # }}}
|
---|
| 127 | # {{{ view TOFIX
|
---|
[20500] | 128 | #if int(md.mesh.dimension) == 3 and options.exist('layer'):
|
---|
| 129 | # #options.getfieldvalue('view') ?
|
---|
| 130 | # ax=fig.gca(projection='3d')
|
---|
| 131 | #plt.show()
|
---|
[21341] | 132 | # }}}
|
---|
| 133 | # {{{ axis
|
---|
[16560] | 134 | if options.exist('axis'):
|
---|
| 135 | if options.getfieldvalue('axis',True)=='off':
|
---|
[17806] | 136 | ax.ticklabel_format(style='plain')
|
---|
| 137 | p.setp(ax.get_xticklabels(), visible=False)
|
---|
| 138 | p.setp(ax.get_yticklabels(), visible=False)
|
---|
[16560] | 139 | # }}}
|
---|
[21341] | 140 | # {{{ box
|
---|
[20500] | 141 | if options.exist('box'):
|
---|
| 142 | eval(options.getfieldvalue('box'))
|
---|
[21341] | 143 | # }}}
|
---|
| 144 | # {{{ xlim, ylim, zlim
|
---|
[13417] | 145 | if options.exist('xlim'):
|
---|
[17806] | 146 | ax.set_xlim(options.getfieldvalue('xlim'))
|
---|
[13417] | 147 | if options.exist('ylim'):
|
---|
[17806] | 148 | ax.set_ylim(options.getfieldvalue('ylim'))
|
---|
[13417] | 149 | if options.exist('zlim'):
|
---|
[17806] | 150 | ax.set_zlim(options.getfieldvalue('zlim'))
|
---|
[21341] | 151 | # }}}
|
---|
| 152 | # {{{ latlon TODO
|
---|
| 153 | # }}}
|
---|
| 154 | # {{{ Basinzoom TODO
|
---|
| 155 | # }}}
|
---|
| 156 | # {{{ ShowBasins TODO
|
---|
| 157 | # }}}
|
---|
| 158 | # {{{ clim
|
---|
[14310] | 159 | if options.exist('clim'):
|
---|
| 160 | lims=options.getfieldvalue('clim')
|
---|
[17806] | 161 | assert len(lims)==2, 'error, clim should be passed as a list of length 2'
|
---|
| 162 | elif options.exist('caxis'):
|
---|
| 163 | lims=options.getfieldvalue('caxis')
|
---|
| 164 | assert len(lims)==2, 'error, caxis should be passed as a list of length 2'
|
---|
| 165 | options.addfielddefault('clim',lims)
|
---|
| 166 | else:
|
---|
[21341] | 167 | if len(data)>0:
|
---|
| 168 | lims=[data.min(),data.max()]
|
---|
| 169 | else:
|
---|
| 170 | lims=[0,1]
|
---|
| 171 | # }}}
|
---|
| 172 | # {{{ shading TODO
|
---|
[20500] | 173 | #if options.exist('shading'):
|
---|
[21341] | 174 | # }}}
|
---|
| 175 | # {{{ grid
|
---|
[13417] | 176 | if options.exist('grid'):
|
---|
[13440] | 177 | if 'on' in options.getfieldvalue('grid','on'):
|
---|
[17806] | 178 | ax.grid()
|
---|
[21341] | 179 | # }}}
|
---|
| 180 | # {{{ colormap
|
---|
| 181 | if options.exist('colornorm'):
|
---|
| 182 | norm=options.getfieldvalue('colornorm')
|
---|
| 183 | if options.exist('colormap'):
|
---|
| 184 | cmap=options.getfieldvalue('colormap')
|
---|
[17806] | 185 | cbar_extend=0
|
---|
| 186 | if options.exist('cmap_set_over'):
|
---|
| 187 | cbar_extend+=1
|
---|
| 188 | if options.exist('cmap_set_under'):
|
---|
| 189 | cbar_extend+=2
|
---|
[21341] | 190 | # }}}
|
---|
| 191 | # {{{ contours
|
---|
[17806] | 192 | if options.exist('contourlevels'):
|
---|
| 193 | plot_contour(md,data,options,ax)
|
---|
[21341] | 194 | # }}}
|
---|
| 195 | # {{{ wrapping TODO
|
---|
| 196 | # }}}
|
---|
| 197 | # {{{ colorbar
|
---|
[16560] | 198 | if options.getfieldvalue('colorbar',1)==1:
|
---|
[21341] | 199 | if cbar_extend==0:
|
---|
| 200 | extend='neither'
|
---|
| 201 | elif cbar_extend==1:
|
---|
| 202 | extend='max'
|
---|
| 203 | elif cbar_extend==2:
|
---|
| 204 | extend='min'
|
---|
| 205 | elif cbar_extend==3:
|
---|
| 206 | extend='both'
|
---|
| 207 | cb = mpl.colorbar.ColorbarBase(ax.cax,cmap=cmap, norm=norm, extend=extend)
|
---|
| 208 | if options.exist('alpha'):
|
---|
| 209 | cb.set_alpha(options.getfieldvalue('alpha'))
|
---|
| 210 | if options.exist('colorbarnumticks'):
|
---|
| 211 | cb.locator=MaxNLocator(nbins=options.getfieldvalue('colorbarnumticks',5))
|
---|
| 212 | else:
|
---|
| 213 | cb.locator=MaxNLocator(nbins=5) # default 5 ticks
|
---|
| 214 | if options.exist('colorbartickspacing'):
|
---|
| 215 | locs=np.arange(lims[0],lims[1]+1,options.getfieldvalue('colorbartickspacing'))
|
---|
| 216 | cb.set_ticks(locs)
|
---|
| 217 | if options.exist('colorbarlines'):
|
---|
| 218 | locs=np.arange(lims[0],lims[1]+1,options.getfieldvalue('colorbarlines'))
|
---|
| 219 | cb.add_lines(locs,['k' for i in range(len(locs))],np.ones_like(locs))
|
---|
| 220 | if options.exist('colorbarlineatvalue'):
|
---|
| 221 | locs=options.getfieldvalue('colorbarlineatvalue')
|
---|
| 222 | colors=options.getfieldvalue('colorbarlineatvaluecolor',['k' for i in range (len(locs))])
|
---|
| 223 | widths=options.getfieldvalue('colorbarlineatvaluewidth',np.ones_like(locs))
|
---|
| 224 | cb.add_lines(locs,colors,widths)
|
---|
| 225 | if options.exist('colorbartitle'):
|
---|
| 226 | if options.exist('colorbartitlepad'):
|
---|
| 227 | cb.set_label(options.getfieldvalue('colorbartitle'),
|
---|
| 228 | labelpad=options.getfieldvalue('colorbartitlepad'),fontsize=fontsize)
|
---|
| 229 | else:
|
---|
| 230 | cb.set_label(options.getfieldvalue('colorbartitle'),fontsize=fontsize)
|
---|
| 231 | cb.ax.tick_params(labelsize=fontsize)
|
---|
| 232 | cb.solids.set_rasterized(True)
|
---|
| 233 | cb.update_ticks()
|
---|
| 234 | cb.set_alpha(1)
|
---|
| 235 | cb.draw_all()
|
---|
| 236 | plt.sca(ax) # return to original axes control
|
---|
| 237 | # }}}
|
---|
| 238 | # {{{ expdisp
|
---|
| 239 | if options.exist('expdisp'):
|
---|
| 240 | expdisp(ax,options)
|
---|
| 241 | # }}}
|
---|
| 242 | # {{{ area TODO
|
---|
| 243 | # }}}
|
---|
| 244 | # {{{ text
|
---|
[17989] | 245 | if options.exist('text'):
|
---|
[21341] | 246 | text=options.getfieldvalue('text')
|
---|
| 247 | textx=options.getfieldvalue('textx')
|
---|
| 248 | texty=options.getfieldvalue('texty')
|
---|
| 249 | textcolor=options.getfieldvalue('textcolor')
|
---|
| 250 | textweight=options.getfieldvalue('textweight')
|
---|
| 251 | textrotation=options.getfieldvalue('textrotation')
|
---|
| 252 | textfontsize=options.getfieldvalue('textfontsize')
|
---|
| 253 | for label,x,y,size,color,weight,rotation in zip(text,textx,texty,textfontsize,textcolor,textweight,textrotation):
|
---|
| 254 | ax.text(x,y,label,transform=ax.transAxes,fontsize=size,color=color,weight=weight,rotation=rotation)
|
---|
| 255 | # }}}
|
---|
| 256 | # {{{ north arrow TODO
|
---|
| 257 | # }}}
|
---|
| 258 | # {{{ scale ruler TODO
|
---|
| 259 | # }}}
|
---|
| 260 | # {{{ streamlines TOFIX
|
---|
| 261 | if options.exist('streamlines'):
|
---|
| 262 | plot_streamlines(md,options,ax)
|
---|
| 263 | # }}}
|
---|
| 264 | # {{{ axis positions TODO
|
---|
| 265 | # }}}
|
---|
| 266 | # {{{ figure position TODO
|
---|
| 267 | # }}}
|
---|
| 268 | # {{{ axes position TODO
|
---|
| 269 | # }}}
|
---|
| 270 | # {{{ showregion TODO
|
---|
| 271 | # }}}
|
---|
| 272 | # {{{ flat edges of a partition TODO
|
---|
| 273 | # }}}
|
---|
| 274 | # {{{ scatter TODO
|
---|
| 275 | # }}}
|
---|
| 276 | # {{{ backgroundcolor TODO
|
---|
| 277 | # }}}
|
---|
| 278 | # {{{ figurebackgroundcolor TODO
|
---|
| 279 | # }}}
|
---|
| 280 | # {{{ lighting TODO
|
---|
| 281 | # }}}
|
---|
| 282 | # {{{ point cloud TODO
|
---|
| 283 | # }}}
|
---|
| 284 | # {{{ inset TODO
|
---|
| 285 | # }}}
|
---|
| 286 |
|
---|