source: cows/trunk/cows/service/imps/data_reader_geoplot_backend/geoplot_slabs/geoplot_slab_contour.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_contour.py@6123
Revision 6123, 3.6 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 logging
2import time
3import numpy
4
5import geoplot.colour_bar
6from geoplot.layer_drawer_contour import LayerDrawerContour
7
8from cows.service.imps.data_reader_geoplot_backend.rendering_option import RenderingOption
9from cows.service.imps.data_reader_geoplot_backend.geoplot_slabs.geoplot_slab_base import GeoplotSlabBase
10from cows.service.imps.data_reader_geoplot_backend.slab_options_parser import SlabOptionsParser
11
12log = logging.getLogger(__name__)
13
14
15
16class GeoplotSlabContour(GeoplotSlabBase):
17
18    style = 'contour'
19    title = 'Contour Lines'
20                     
21    renderingOptions = GeoplotSlabBase.renderingOptions + [       
22        RenderingOption('num_contour_lines', "Number of Contour Lines" ,int,10),
23        RenderingOption('contour_font_size', "Contour Label Size" ,str,'medium',["small","medium", "large",]),
24        RenderingOption('contour_label_interval', "Interval Between Labels" ,int,1),
25    ]
26
27    def _setupLayerDrawer(self):
28       
29        cmapMin = self.parser.getOption('cmap_min')
30        if cmapMin == None:
31            cmapMin = self.variable.min()
32       
33        cmapMax = self.parser.getOption('cmap_max')
34        if cmapMax == None:
35            cmapMax = self.variable.max()
36       
37        ld = LayerDrawerContour(self.variable, 
38                                 cmap=self.parser.getOption('cmap'), 
39                                 colourBarMin=cmapMin,
40                                 colourBarMax=cmapMax,
41                                 bgcolor = self.bgcolor,
42                                 colourBarScale = self.parser.getOption('cmap_scale'),
43                                 labelInterval= self.parser.getOption('contour_label_interval'),
44                                 numLines = self.parser.getOption('num_contour_lines'),
45                                 fontSize = self.parser.getOption('contour_font_size'),
46                                 intervals = self.parser.getOption('intervals'),
47                                 transparent=self.transparent)
48       
49        return ld
50
51
52    @staticmethod
53    def makeColourBar(width , height, orientation, units, renderOpts, variable):
54       
55        parser = SlabOptionsParser(GeoplotSlabContour.renderingOptions, renderOpts)
56               
57        minval = parser.getOption('cmap_min')
58        if minval == None:
59            minval = variable.min()
60           
61        maxval = parser.getOption('cmap_max')
62        if maxval == None:
63            maxval = variable.max()
64           
65            # can't have a colourbar with an infinite maximum, take the highest
66            # non-inf value.
67            if maxval == numpy.inf:
68                maxval = numpy.ma.masked_equal(variable, numpy.inf).max()
69       
70        im = geoplot.colour_bar.getColourBarImage(width, height, 
71                                             label='Units of measure: %s' % str(units),
72                                             cmap=parser.getOption('cmap'), 
73                                             colourBarMin=minval,
74                                             colourBarMax=maxval,
75                                             colourBarScale=parser.getOption('cmap_scale'),
76                                             numIntervals=parser.getOption('num_contour_lines') - 1, 
77                                             orientation=orientation,
78                                             intervals=parser.getOption('intervals'),
79                                             intervalNames=parser.getOption('intervalNames'),
80                                             colourBarStyle='line',
81                                             )
82   
83        return im
Note: See TracBrowser for help on using the repository browser.