Changeset 6507 for qesdi


Ignore:
Timestamp:
08/02/10 09:00:29 (10 years ago)
Author:
pnorton
Message:

Moved some of the layer drawer options into the common drawing code so they are available to the standards plots as well.

Location:
qesdi/geoplot/trunk/lib/geoplot
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • qesdi/geoplot/trunk/lib/geoplot/colour_bar.py

    r6118 r6507  
    4242class ColourBar(object): 
    4343 
    44     def __init__(self, colourBarLabel="",colourBarPosition='horizontal', colourBarStyle=COLOUR_BAR_STYLES.CONTINUOUS): 
     44    def __init__(self, colourBarLabel="",colourBarPosition='horizontal', colourBarStyle=COLOUR_BAR_STYLES.CONTINUOUS, 
     45                 intervalNames=None): 
    4546 
    4647        self._position = None 
     
    4950        self.colourBarPosition = colourBarPosition 
    5051        self.colourBarStyle = colourBarStyle 
     52        self.intervalNames = intervalNames 
    5153         
    5254        self.labelFont = config[FONTS_SECTION]['ColourBarLabel'] 
    5355 
    54     def draw(self, colourBarAxis, colourScheme, fontSize='medium', intervalNames=None): 
     56    def draw(self, colourBarAxis, colourScheme, fontSize='medium'): 
    5557        """ 
    5658        Adds the colour bar to the (and optionally a label) to the figure. 
     
    6567         
    6668        if self.colourBarStyle == COLOUR_BAR_STYLES.LEGEND: 
    67             self._drawLegendColourBar(colourBarAxis, colourScheme, fontSize, intervalNames) 
     69            self._drawLegendColourBar(colourBarAxis, colourScheme, fontSize) 
    6870             
    6971        elif self.colourBarStyle == COLOUR_BAR_STYLES.LINE: 
     
    116118         
    117119        kwargs['format'] = matplotlib.ticker.FixedFormatter(labels) 
    118         kwargs['spacing'] = 'proportional' 
     120         
     121         
     122        if colourScheme.scale == COLOUR_SCHEME_SCALE.LOG: 
     123            kwargs['spacing'] = 'uniform' 
     124        else: 
     125            kwargs['spacing'] = 'proportional' 
    119126         
    120127        cb = ColorbarBase(axes, **kwargs) 
     
    126133        return cb     
    127134     
    128     def _drawLegendColourBar(self, colourBarAxis, colourScheme, fontSize, intervalNames): 
     135    def _drawLegendColourBar(self, colourBarAxis, colourScheme, fontSize): 
    129136        """ 
    130137         
     
    138145        labels = None 
    139146         
    140         log.debug("intervalNames = %s" % (intervalNames,)) 
    141          
    142         if not intervalNames is None: 
    143              
    144             labels = filter(lambda x: x.strip() != '', intervalNames.split(',')) 
     147        log.debug("intervalNames = %s" % (self.intervalNames,)) 
     148         
     149        if not self.intervalNames is None: 
     150             
     151            labels = filter(lambda x: x.strip() != '', self.intervalNames.split(',')) 
    145152             
    146153            if len(labels) != len(colourScheme.intervals.midpoints): 
     
    216223        upShift = (levels[-1] - levels[-2])/4.0 
    217224         
     225        if colourScheme.scale == COLOUR_SCHEME_SCALE.LOG and \ 
     226            (norm.vmin - downShift) <= 0: 
     227            downShift = norm.vmin * 0.5 
     228             
     229         
    218230        n2 =norm.__class__(norm.vmin - downShift, norm.vmax + upShift) 
    219231         
     
    225237        labels  = [ labelFormat % (bound,) for bound in colourScheme.intervals.bounds] 
    226238         
    227         kwargs['orientation'] = 'horizontal' 
     239        kwargs['orientation'] = self.colourBarPosition 
     240        #kwargs['orientation'] = 'horizontal' 
    228241        kwargs['filled'] = False 
    229242        kwargs['extend'] = 'neither' 
     
    234247        else: 
    235248            kwargs['spacing'] = 'proportional' 
     249             
    236250        log.debug("kwargs = %s" % (kwargs,)) 
    237251         
     
    391405    cb = ColourBar(colourBarLabel=label,  
    392406                   colourBarPosition=orientation, 
    393                    colourBarStyle=colourBarStyle) 
    394      
    395     cb.draw(axes, colourScheme, 
    396             intervalNames=intervalNames)     
     407                   colourBarStyle=colourBarStyle, 
     408                 intervalNames=intervalNames) 
     409     
     410    cb.draw(axes, colourScheme)     
    397411     
    398412    return geoplot.utils.figureToImage(fig) 
  • qesdi/geoplot/trunk/lib/geoplot/colour_scheme_intervals.py

    r6139 r6507  
    2424        self.bounds = bounds 
    2525         
     26    def __str__(self): 
     27        return "<ColourSchemeInterval bounds=%s, midpoints=%s>" % (self.bounds, self.midpoints) 
     28         
    2629class ColourSchemeIntervalBuilder(object): 
    2730     
     
    3538             
    3639        bounds = None 
     40         
    3741        if boundsString is not None: 
    3842             
     
    4650             
    4751        if bounds is None: 
    48                  
     52            log.debug("cbRange = %s, scale = %s, numIntervals = %s" % (cbRange, scale, numIntervals,)) 
    4953            bounds = self._getBoundsFromRange(cbRange, scale, numIntervals) 
    50              
    51         interval = self._buildCSIntervalFromBounds(bounds)         
     54         
     55         
     56        interval = self._buildCSIntervalFromBounds(bounds) 
     57        log.debug("interval = %s" % (interval,))         
    5258         
    5359        return interval 
  • qesdi/geoplot/trunk/lib/geoplot/config.ini

    r6420 r6507  
    66colourBarLabel = None 
    77colourBarPosition = None 
     8intervalNames = None 
    89 
    910[Defaults:ColourSchemeBuilder] 
     
    4849 
    4950[Defaults:ContourDrawer] 
    50 numContourLines=10 
    5151contourLabelInterval=1 
    5252contourLineWidth=0.5 
     
    5757drawValuesFile=False 
    5858valueFormat=%.2f 
     59hideOutsideBounds=False 
     60 
     61[Defaults:ContourPlot] 
     62contourFontSize=None 
     63numContourLines=10 
    5964 
    6065[PlotProperties] 
  • qesdi/geoplot/trunk/lib/geoplot/contour_drawer.py

    r6118 r6507  
    3535    """ 
    3636 
    37     def __init__(self, numContourLines=10, contourLabelInterval=1,  
     37    def __init__(self, contourLabelInterval=1,  
    3838                 contourLineWidth=0.5, 
    3939                 contourLabelFormat="%.2f"): 
     
    4242        """ 
    4343 
    44         self.numContourLines = numContourLines 
    4544        self.contourLabelInterval = contourLabelInterval 
    4645        self.contourLineWidth = contourLineWidth 
     
    7473         
    7574        if valuesFound == True: 
    76              
    77 #            if scheme.scale == COLOUR_SCHEME_SCALE.LOG: 
    78 # 
    79 #                #lev_exp = np.arange(np.floor(np.log10(z.min())-1), 
    80 #                #                       np.ceil(np.log10(z.max())+1)) 
    81 #                #levs = np.power(10, lev_exp) 
    82 #                lmin = N.log10(scheme.norm.vmin) 
    83 #                lmax = N.log10(scheme.norm.vmax) 
    84 #                levels = N.logspace(lmin, lmax,  self.numContourLines) 
    85 #                labelFormat = "%.1E"  
    86 #            else: 
    87 #                levels = N.linspace(scheme.norm.vmin, scheme.norm.vmax, self.numContourLines) 
    88 #                labelFormat = "%1.3f" 
    89              
     75              
    9076            levels = scheme.intervals.bounds 
    9177            # make sure the upper contour line is drawn if it is the highest 
     
    9379            if levels[-1] == grid_mapUnits.values.max(): 
    9480                levels[-1] = levels[-1] * 0.999999 
    95              
     81                         
    9682            CS = axes.contour(grid_mapUnits.midpointsX,  
    9783                              grid_mapUnits.midpointsY,  
  • qesdi/geoplot/trunk/lib/geoplot/contour_plot.py

    r6420 r6507  
    11from geoplot.plot_base import PlotBase 
    22from geoplot.contour_drawer import ContourDrawer 
     3from geoplot.colour_bar import COLOUR_BAR_STYLES 
     4 
    35 
    46import logging 
     
    1719        Creates the contour plot 
    1820        ''' 
     21         
     22        myKwargs = self._getArgs(kwargs, ContourPlot.__name__) 
     23        self.contourFontSize = myKwargs.get('contourFontSize', None) 
     24         
    1925        self._contourDrawer = ContourDrawer(**self._getArgs(kwargs, ContourDrawer.__name__)) 
    2026                 
    2127        PlotBase.__init__(self, **kwargs) 
    2228         
     29        self.numContourLines = myKwargs['numContourLines'] 
     30         
     31        self._colourBar.colourBarStyle = COLOUR_BAR_STYLES.LINE 
     32         
    2333    def _drawDiagram(self, map, grid, axes, colourScheme): 
    2434         
     35        fontSize = self.contourFontSize 
     36         
     37        if fontSize is None: 
     38            fontSize = self.fontSize 
     39         
    2540        self._contourDrawer.draw(axes, grid, colourScheme, map.basemap,  
    26                                  self.fontSize) 
     41                                 fontSize) 
    2742     
     43    def __set_numContourLines(self, value): 
     44        self._schemeBuilder.numIntervals = value -1 
     45         
     46    def __get_numContourLines(self): 
     47        return self._schemeBuilder.numIntervals + 1 
     48     
     49    numContourLines = property(__get_numContourLines, __set_numContourLines) 
  • qesdi/geoplot/trunk/lib/geoplot/grid_drawer.py

    r6420 r6507  
    2828from geoplot.grid import Grid 
    2929import geoplot.utils as geoplot_utils 
     30from geoplot.colour_bar import COLOUR_SCHEME_SCALE 
    3031 
    3132#setup the logging 
     
    4041    def __init__(self, drawValues=False, drawValuesFile=False,  
    4142                 valueFormat="%.2f", showGridLines=False, 
    42                  outline=False): 
     43                 outline=False, hideOutsideBounds=False): 
    4344        """ 
    4445        Constructs a GridDrawer object               
     
    4950        self.showGridLines = showGridLines 
    5051        self.outline = outline 
    51  
    52     def draw(self, axes, grid, limits=None, basemap=None, norm=None, 
     52        self.hideOutsideBounds = hideOutsideBounds 
     53 
     54    def draw(self, axes, grid, limits=None, basemap=None, colourScheme=None, 
    5355             cmap=None, fontSize='medium', assumeBoundsParallel=None): 
    5456        """ 
     
    6567        """ 
    6668 
    67         if cmap == None: 
     69        if cmap is None: 
    6870            cmap = matplotlib.cm.get_cmap() 
    6971            cmap.set_bad("w") 
     
    7173        log.debug("cmap._rgba_under  = %s" % (cmap._rgba_under ,)) 
    7274         
    73         if norm == None: 
    74             norm = matplotlib.colors.Normalize(grid.values.min(), grid.values.max())      
    75  
     75        if colourScheme is None: 
     76            norm = matplotlib.colors.Normalize(grid.values.min(), grid.values.max()) 
     77        else: 
     78            norm = colourScheme.norm 
     79         
     80        grid = self._applyMask(grid, colourScheme) 
     81         
    7682        xLimits, yLimits = self._transformLimits(limits, basemap) 
    7783         
     
    464470         
    465471        return isInLimits 
    466      
     472 
     473    def _applyMask(self, grid, scheme): 
     474        """ 
     475        Masks the data outside the scheme bounds if hideOutside is true, also 
     476        masks values less than zero if a log scale is being used 
     477        """ 
     478         
     479        if self.hideOutsideBounds: 
     480            grid.values = N.ma.masked_less(grid.values, scheme.norm.vmin) 
     481            grid.values = N.ma.masked_greater(grid.values, scheme.norm.vmax) 
     482         
     483        if scheme.scale == COLOUR_SCHEME_SCALE.LOG: 
     484            grid.values = N.ma.masked_less_equal(grid.values, 0.0) 
     485             
     486        return grid 
     487    
    467488if __name__ == '__main__': 
    468489    import geoplot.log_util as log_util 
  • qesdi/geoplot/trunk/lib/geoplot/grid_plot.py

    r6420 r6507  
    5959        self._gridDrawer.draw(axes, grid, limits=(self.xLimits, self.yLimits), 
    6060                              basemap=map.basemap,  
    61                               norm=colourScheme.norm, cmap=colourScheme.cmap,  
     61                              colourScheme=colourScheme, cmap=colourScheme.cmap,  
    6262                              fontSize=self.fontSize) 
    6363 
  • qesdi/geoplot/trunk/lib/geoplot/interval_plot.py

    r6420 r6507  
    6363        self._gridDrawer.draw(axes, grid, limits=(self.xLimits, self.yLimits), 
    6464                              basemap=map.basemap,  
    65                               norm=colourScheme.norm, cmap=colourScheme.getListedCmap(),  
     65                              colourScheme=colourScheme,  
     66                              cmap=colourScheme.getListedCmap(),  
    6667                              fontSize=self.fontSize) 
    6768 
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer.py

    r6118 r6507  
    180180        return map         
    181181 
    182     def _applyMask(self, grid, scheme, hideOutside): 
    183         """ 
    184         Masks the data outside the scheme bounds if hideOutside is true, also 
    185         masks values less than zero if a log scale is being used 
    186         """ 
    187          
    188         if self._hideOutsideBounds: 
    189             grid.values = numpy.ma.masked_less(grid.values, scheme.norm.vmin) 
    190             grid.values = numpy.ma.masked_greater(grid.values, scheme.norm.vmax) 
    191          
    192         if scheme.scale == COLOUR_SCHEME_SCALE.LOG: 
    193             grid.values = numpy.ma.masked_less_equal(grid.values, 0.0) 
    194              
    195         return grid 
    196          
    197182    ### properties ###         
    198183     
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer_grid.py

    r6118 r6507  
    2424        self.cdmsVar = cdmsVar 
    2525        self.numIntervals = numIntervals 
    26         self.hideOutside = hideOutside 
    2726        self.showGridLines = showGridLines 
    2827        self.outline = outline 
    2928        self.drawIntervals = drawIntervals 
     29        self.hideOutside = hideOutside 
    3030         
    3131         
     
    3838         
    3939        scheme = self._csBuilder.buildScheme(grid=grid) 
    40          
    41         self._applyMask(grid, scheme, self.hideOutside) 
    42          
     40                 
    4341        #draw the grid on the axis 
    4442        self._gridDrawer.draw(axes, grid, 
    4543                              basemap=self._getBasemap(xLimits, yLimits),  
    4644                              limits=(xLimits, yLimits), 
    47                               norm=scheme.norm, 
     45                              colourScheme=scheme, 
    4846                              cmap=self._getCmap(scheme) 
    4947                              ) 
     
    10098     
    10199    def __set_hideOutside(self, value): 
    102         self._hideOutsideBounds = value 
     100        self._gridDrawer.hideOutsideBounds = value 
    103101 
    104102    def __get_hideOutside(self): 
    105         return self._hideOutsideBounds 
     103        return self._gridDrawer.hideOutsideBounds 
    106104         
    107105    hideOutside = property(__get_hideOutside, __set_hideOutside, None, None) 
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer_grid_fast.py

    r6118 r6507  
    6464         
    6565        scheme = self._csBuilder.buildScheme(grid=grid) 
    66          
    67         self._applyMask(grid, scheme, self.hideOutside) 
    68          
     66                 
    6967        # draw the grid on the axis, not the basemap is None as it  
    7068        # must be lat/lon 
     
    7270                              basemap=self._getBasemap(xLimits, yLimits),  
    7371                              limits=(xLimits, yLimits), 
    74                               norm=scheme.norm, 
     72                              colourScheme=scheme, 
    7573                              cmap=self._getCmap(scheme), 
    7674                              assumeBoundsParallel=True) 
  • qesdi/geoplot/trunk/lib/geoplot/plot_base.py

    r6420 r6507  
    11import logging 
     2import numpy 
    23 
    34from geoplot.colour_bar import ColourBar 
     
    148149         
    149150        colourScheme = self._schemeBuilder.buildScheme(grid) 
    150          
     151                     
    151152        log.debug("colourScheme.__class__ = %s" % (colourScheme.__class__,)) 
    152153         
Note: See TracChangeset for help on using the changeset viewer.