On Sun, Nov 23, 2008 at 2:01 AM, Paul Ivanov <[EMAIL PROTECTED]> wrote: > I took a stab at it, how does this look? > > I also took the liberty of adding alpha to LinearSegmentedColormap and > updated its docstring changing two somewhat ambiguous uses of the word > 'entry' with 'key' and 'value'.
Hey Paul, Thanks for taking this on. I haven't tested this but I read the patch and have some inline comments below. Some additional comments: * the patch should include a section in the CHANGELOG and API_CHANGES letting people know what is different. * you should run examples/tests/backend_driver.py and make sure all the examples still run, checking the output of some of the mappable types (images, scaltter, pcolor...) * it would be nice to have an example in the examples dir which exercises the new capabilities. See also, in case you haven't, http://matplotlib.sourceforge.net/devel/coding_guide.html, which covers some of this in more detail. Thanks again! Comments below: Index: lib/matplotlib/colors.py =================================================================== --- lib/matplotlib/colors.py (revision 6431) +++ lib/matplotlib/colors.py (working copy) @@ -452,7 +452,7 @@ self._isinit = False - def __call__(self, X, alpha=1.0, bytes=False): + def __call__(self, X, alpha=None, bytes=False): """ *X* is either a scalar or an array (of any dimension). If scalar, a tuple of rgba values is returned, otherwise @@ -466,9 +466,10 @@ """ You need to document what alpha can be here: what does None mean, can it be an array, scalar, etc... if not self._isinit: self._init() - alpha = min(alpha, 1.0) # alpha must be between 0 and 1 - alpha = max(alpha, 0.0) - self._lut[:-3, -1] = alpha + if alpha: I prefer to explicitly use "if alpha is None", since there are other things that would test False (0, [], '') that you probably don't mean. + alpha = min(alpha, 1.0) # alpha must be between 0 and 1 + alpha = max(alpha, 0.0) You should be able to use np.clip(alpha, 0, 1) here, but we should consider instead raising for illegal alpha values since this will be more helpful to the user. I realize some of this is inherited code from before your changes, but we can improve it while making this patch. + self._lut[:-3, -1] = alpha mask_bad = None if not cbook.iterable(X): vtype = 'scalar' @@ -558,9 +559,10 @@ def __init__(self, name, segmentdata, N=256): """Create color map from linear mapping segments - segmentdata argument is a dictionary with a red, green and blue - entries. Each entry should be a list of *x*, *y0*, *y1* tuples, - forming rows in a table. + segmentdata argument is a dictionary with red, green and blue + keys. An optional alpha key is also supported. Each value + should be a list of *x*, *y0*, *y1* tuples, forming rows in a + table. Example: suppose you want red to increase from 0 to 1 over the bottom half, green to do the same over the middle half, @@ -606,6 +608,8 @@ self._lut[:-3, 0] = makeMappingArray(self.N, self._segmentdata['red']) self._lut[:-3, 1] = makeMappingArray(self.N, self._segmentdata['green']) self._lut[:-3, 2] = makeMappingArray(self.N, self._segmentdata['blue']) + if self._segmentdata.has_key('alpha'): + self._lut[:-3, 3] = makeMappingArray(self.N, self._segmentdata['blue']) Is this what you meant? I think you would use 'alpha' rather than 'blue' here, no? self._isinit = True self._set_extremes() @@ -664,11 +668,10 @@ def _init(self): - rgb = np.array([colorConverter.to_rgb(c) + rgba = np.array([colorConverter.to_rgba(c) for c in self.colors], np.float) self._lut = np.zeros((self.N + 3, 4), np.float) - self._lut[:-3, :-1] = rgb - self._lut[:-3, -1] = 1 + self._lut[:-3] = rgba self._isinit = True self._set_extremes() ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users