source: cows/trunk/cows/service/imps/data_reader_geoplot_backend/geoplot_slabs/geoplot_slab_interval.py @ 6123

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/trunk/cows/service/imps/data_reader_geoplot_backend/geoplot_slabs/geoplot_slab_interval.py@6123
Revision 6123, 3.7 KB checked in by pnorton, 11 years ago (diff)

Added the interval geoplot renderer, also improved the slab option parser and moved the responsibility for generating the colour bars to the slabs.

Line 
1import time
2import numpy
3import logging
4
5import geoplot.colour_bar
6from geoplot.layer_drawer_grid import LayerDrawerGrid
7from geoplot.layer_drawer_grid_fast import LayerDrawerGridFast
8
9from cows.service.imps.data_reader_geoplot_backend.rendering_option import RenderingOption
10from cows.service.imps.data_reader_geoplot_backend.geoplot_slabs.geoplot_slab_base import GeoplotSlabBase
11from cows.service.imps.data_reader_geoplot_backend.slab_options_parser import SlabOptionsParser
12
13log = logging.getLogger(__name__)
14
15class GeoplotSlabInterval(GeoplotSlabBase):
16
17    style = 'interval'
18    title = 'Intervals'
19                       
20    renderingOptions = GeoplotSlabBase.renderingOptions +[     
21        RenderingOption('disable_subset', "Disable Subsetting" ,bool,False),
22        RenderingOption('show_grid_lines', "Draw Grid Boxes" ,bool,False),
23        RenderingOption('intervals', "intervals" ,str,None),
24        RenderingOption('intervalNames', "intervalNames" ,str,None),
25        RenderingOption('num_intervals', 'Default Num Intervals', int, 6),
26        RenderingOption('hide_outside', "Mask Data Outside Bounds" , bool ,False),
27    ]
28       
29    def _setupLayerDrawer(self):
30       
31        cmapMin = self.parser.getOption('cmap_min')
32        cmapMax = self.parser.getOption('cmap_max')
33           
34        if self.parser.getOption('disable_subset'):
35            ldClass = LayerDrawerGrid
36        else:
37            ldClass = LayerDrawerGridFast
38   
39        ld = ldClass(self.variable, 
40                     cmap=self.parser.getOption('cmap'), 
41                     showGridLines=self.parser.getOption('show_grid_lines'), 
42                     colourBarMin=cmapMin,
43                     colourBarMax=cmapMax,
44                     numIntervals = self.parser.getOption('num_intervals'),
45                     colourBarScale = self.parser.getOption('cmap_scale'),
46                     hideOutside = self.parser.getOption('hide_outside'),
47                     bgcolor = self.bgcolor,
48                     intervals = self.parser.getOption('intervals'),   
49                     transparent=self.transparent,
50                     drawIntervals=True,
51                    )
52       
53        return ld
54   
55    @staticmethod
56    def makeColourBar(width , height, orientation, units, renderOpts, variable):
57       
58        parser = SlabOptionsParser(GeoplotSlabInterval.renderingOptions, renderOpts)
59               
60        minval = parser.getOption('cmap_min')
61        if minval == None:
62            minval = variable.min()
63           
64        maxval = parser.getOption('cmap_max')
65        if maxval == None:
66            maxval = variable.max()
67           
68            # can't have a colourbar with an infinite maximum, take the highest
69            # non-inf value.
70            if maxval == numpy.inf:
71                maxval = numpy.ma.masked_equal(variable, numpy.inf).max()
72
73        im = geoplot.colour_bar.getColourBarImage(width, height, 
74                                             label='Units of measure: %s' % str(units),
75                                             cmap=parser.getOption('cmap'), 
76                                             colourBarMin=minval,
77                                             colourBarMax=maxval,
78                                             colourBarScale=parser.getOption('cmap_scale'),
79                                             numIntervals=parser.getOption('num_intervals'), 
80                                             orientation=orientation,
81                                             intervals=parser.getOption('intervals'),
82                                             intervalNames=parser.getOption('intervalNames'),
83                                             colourBarStyle='legend',
84                                             )
85   
86        return im   
87 
Note: See TracBrowser for help on using the repository browser.