Changeset 5760 for qesdi


Ignore:
Timestamp:
24/09/09 12:03:00 (10 years ago)
Author:
pnorton
Message:

Added the ability to set the background colour for the layer drawers, also added the ability to draw the land for the coastline layer drawer. To get round a restriction in the cairo renderer I've added a custom version until it can be fixed in the trunk.

Location:
qesdi/geoplot/trunk/lib/geoplot
Files:
1 added
5 edited

Legend:

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

    r5735 r5760  
    88import time 
    99 
     10import matplotlib.colors 
    1011from matplotlib.figure import Figure 
    1112 
     
    3435                 cmapRange=(None,None),  
    3536                 intervalColourbar=False,  
     37                 bgcolour='white', 
    3638                 intervalNames=None): 
    3739         
     
    3941        self.transparent = transparent 
    4042        self.cmap = cmap 
     43        self._bgcolour = 'white' 
     44        self.bgcolour = bgcolour 
    4145         
    4246        log.debug("cmapRange = %s" % (cmapRange,)) 
     
    8892        figsize=(width / float(dpi), height / float(dpi)) 
    8993 
    90         fig = Figure(figsize=figsize, dpi=dpi, facecolor='w',  
     94        fig = Figure(figsize=figsize, dpi=dpi, facecolor=self.bgcolour, edgecolor=self.bgcolour, 
    9195                     frameon=(not self.transparent)) 
    9296         
    9397        log.debug("fig.frameon = %s" % (fig.frameon,)) 
     98        log.debug("fig.get_facecolor() = %s" % (fig.get_facecolor(),)) 
     99        log.debug("self.bgcolour = %s" % (self.bgcolour,)) 
    94100         
    95101        return fig         
     
    162168        return map         
    163169     
     170    def _getMatplotlibColour(self, value): 
     171        """ 
     172        Makes sure that value is a valid matplotlib colour, will convert form a float 
     173        to a string if neccesary. Will raise a ValueError if the value is not a valid colour. 
     174        """ 
     175        if type(value) == float: 
     176            val = str(value) 
     177        else: 
     178            val = value 
     179             
     180        try: 
     181            matplotlib.colors.colorConverter.to_rgb(val) 
     182        except: 
     183            raise 
     184        else: 
     185            return val     
     186     
    164187    ### properties ###         
    165188     
     
    242265    intervalNames = property(__get_intervalNames, __set_intervalNames) 
    243266     
     267     
     268    def __set_bgcolour(self, value): 
     269         
     270        try: 
     271            newVal = self._getMatplotlibColour(value) 
     272        except ValueError, e: 
     273            log.warning("Error occurred getting matplotlib colour form %s, Exception:%s" % (value, e)) 
     274        else: 
     275            self._bgcolour = newVal 
     276                 
     277    def __get_bgcolour(self): 
     278        return self._bgcolour 
     279     
     280    bgcolour = property(__get_bgcolour, __set_bgcolour)     
     281     
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer_coastline.py

    r5753 r5760  
    2222                 transparent=False,  
    2323                 drawRivers=False, 
     24                 bgcolour='white', 
    2425                 coastlineColour='black', 
     26                 landColour=None, 
    2527                 coastlineWidth=0.5): 
    2628         
    2729        # incase the coastlineColour isn't valid default to black 
    2830        self._coastlineColour = 'black' 
     31        self._landColour = None 
    2932         
    3033        self.coastlineColour = coastlineColour 
    3134        self.coastlineWidth = 0.5 
     35        self.landColour = landColour 
    3236         
    3337        LayerDrawerBase.__init__(self, transparent=transparent, 
    3438                                 projection=projection, 
    3539                                 resolution=resolution, 
     40                                 bgcolour=bgcolour 
    3641                                 ) 
    3742         
     
    5964                                    antialiased=0,                                    
    6065                                    xLimits=xLimits, yLimits=yLimits) 
    61                      
    6266         
    63         #map.basemap.fillcontinents(color='coral',lake_color=None, ax=axes) 
     67        if self.landColour not in [None, '']: 
     68             
     69            kwargs = {'color':self.landColour, 'ax':axes} 
     70             
     71            if self.transparent == False: 
     72                kwargs['lake_color'] = self.bgcolour 
     73             
     74            map.basemap.fillcontinents(**kwargs) 
     75             
     76             
    6477        #map.basemap.drawparallels([10,20,30,40],ax=axes) 
    6578        #map.basemap.bluemarble(ax=axes) 
    6679 
    67     def _getMatplotlibColour(self, value): 
    68         """ 
    69         Makes sure that value is a valid matplotlib colour, will convert form a float 
    70         to a string if neccesary. Will raise a ValueError if the value is not a valid colour. 
    71         """ 
    72         if type(value) == float: 
    73             val = str(value) 
    74         else: 
    75             val = value 
    76              
    77         try: 
    78             matplotlib.colors.colorConverter.to_rgb(val) 
    79         except: 
    80             raise 
    81         else: 
    82             return val 
     80 
    8381 
    8482    def __set_drawRivers(self, value): 
     
    105103    coastlineColour = property(__get_coastlineColour, __set_coastlineColour) 
    106104     
     105    def __set_landColour(self, value): 
    107106         
     107        try: 
     108            if value == None: 
     109                newVal = value 
     110            else: 
     111                newVal = self._getMatplotlibColour(value) 
     112        except ValueError, e: 
     113            log.warning("Error occurred getting matplotlib colour form %s, Exception:%s" % (value, e)) 
     114        else: 
     115            self._landColour = newVal 
     116                 
     117    def __get_landColour(self): 
     118        return self._landColour 
     119     
     120    landColour = property(__get_landColour, __set_landColour)     
     121         
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer_contour.py

    r5753 r5760  
    1515    def __init__(self, cdmsVar, gridType='latlon', projection='latlon', cmap = None,  cmapRange=(None,None), 
    1616                 transparent=False, numLines=10, fontSize='medium', labelInterval=1,  
     17                 bgcolour='white', 
    1718                 intervalColourbar=False, intervalNames=None, lineWidth=0.5): 
    1819         
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer_grid.py

    r5710 r5760  
    1717                 transparent=False,  
    1818                 intervalColourbar=False,  
     19                 bgcolour='white', 
    1920                 intervalNames=None): 
    2021         
     
    2728        self.outline = outline 
    2829         
    29         LayerDrawerBase.__init__(self, gridType=gridType, transparent=transparent, cmap=cmap, cmapRange=cmapRange) 
     30        LayerDrawerBase.__init__(self, gridType=gridType, transparent=transparent, cmap=cmap, cmapRange=cmapRange, bgcolour=bgcolour) 
    3031         
    3132    def _drawToAxes(self, axes, xLimits, yLimits): 
  • qesdi/geoplot/trunk/lib/geoplot/utils.py

    r5710 r5760  
    1717# was having problems with alpha belnding so swapped the backend 
    1818#from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
    19 from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas 
     19#from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas 
     20from geoplot.custom_cairo_renderer import CustomFigureCanvasCairo as FigureCanvas 
    2021 
    2122from geoplot.image_import import Image 
Note: See TracChangeset for help on using the changeset viewer.