From: <ef...@us...> - 2008-04-18 20:11:10
|
Revision: 5047 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5047&view=rev Author: efiring Date: 2008-04-18 13:11:03 -0700 (Fri, 18 Apr 2008) Log Message: ----------- Improve color handling in collections, fix scatter bug. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/collections.py trunk/matplotlib/lib/matplotlib/colors.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2008-04-18 15:20:03 UTC (rev 5046) +++ trunk/matplotlib/lib/matplotlib/axes.py 2008-04-18 20:11:03 UTC (rev 5047) @@ -4134,7 +4134,7 @@ """ SCATTER(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=1.0, linewidths=None, - faceted=True, **kwargs) + verts=None, **kwargs) Supported function signatures: SCATTER(x, y, **kwargs) @@ -4187,10 +4187,9 @@ angle is the angle of rotation of the symbol Finally, marker can be (verts, 0), verts is a sequence of (x,y) - vertices for a custom scatter symbol. + vertices for a custom scatter symbol. Alternatively, use the + kwarg combination marker=None,verts=verts. - s is a size argument in points squared. - Any or all of x, y, s, and c may be masked arrays, in which case all masks will be combined and only unmasked points will be plotted. @@ -4217,16 +4216,13 @@ required by RegularPolyCollection -- see collections.RegularPolyCollection for details - * faceted: if True, will use the default edgecolor for the - markers. If False, will set the edgecolors to be the same - as the facecolors. - This kwarg is deprecated; - please use the edgecolors kwarg instead: - shading='flat' --> edgecolors='None' - shading='faceted --> edgecolors=None - edgecolors also can be any mpl color or sequence of colors. + Optional kwargs control the Collection properties; in + particular: - Optional kwargs control the Collection properties: + edgecolors='none' : to plot faces with no outlines + facecolors='none' : to plot unfilled outlines + + Here are the standard descriptions of all the Collection kwargs: %(Collection)s A Collection instance is returned @@ -4270,8 +4266,12 @@ else: scales = s - if faceted: edgecolors = None - else: edgecolors = 'None' + if faceted: + edgecolors = None + else: + edgecolors = 'none' + warnings.warn('''replace "faceted=False" with "edgecolors='none'"''', + DeprecationWarning) #2008/04/18 sym = None symstyle = 0 Modified: trunk/matplotlib/lib/matplotlib/collections.py =================================================================== --- trunk/matplotlib/lib/matplotlib/collections.py 2008-04-18 15:20:03 UTC (rev 5046) +++ trunk/matplotlib/lib/matplotlib/collections.py 2008-04-18 20:11:03 UTC (rev 5047) @@ -77,21 +77,12 @@ artist.Artist.__init__(self) cm.ScalarMappable.__init__(self, norm, cmap) - if facecolors is None: facecolors = mpl.rcParams['patch.facecolor'] - if edgecolors is None: edgecolors = mpl.rcParams['patch.edgecolor'] - if linewidths is None: linewidths = (mpl.rcParams['patch.linewidth'],) - if antialiaseds is None: antialiaseds = (mpl.rcParams['patch.antialiased'],) - self.set_linestyles(linestyles) + self.set_edgecolor(edgecolors) + self.set_facecolor(facecolors) + self.set_linewidth(linewidths) + self.set_linestyle(linestyles) + self.set_antialiased(antialiaseds) - self._facecolors = _colors.colorConverter.to_rgba_array(facecolors) - if edgecolors == 'None': - self._edgecolors = self._facecolors - linewidths = (0,) - else: - self._edgecolors = _colors.colorConverter.to_rgba_array(edgecolors) - self._linewidths = self._get_value(linewidths) - self._antialiaseds = self._get_value(antialiaseds) - self._uniform_offsets = None self._offsets = npy.array([], npy.float_) if offsets is not None: @@ -118,6 +109,17 @@ raise TypeError('val must be a float or nonzero sequence of floats') + def _get_bool(self, val): + try: return (bool(val), ) + except TypeError: + if cbook.iterable(val) and len(val): + try: bool(val[0]) + except TypeError: pass # raise below + else: return val + + raise TypeError('val must be a bool or nonzero sequence of them') + + def get_paths(self): raise NotImplementedError @@ -219,6 +221,7 @@ ACCEPTS: float or sequence of floats """ + if lw is None: lw = mpl.rcParams['patch.linewidth'] self._linewidths = self._get_value(lw) set_lw = set_linewidth = set_linewidths @@ -263,6 +266,17 @@ self._linestyles = dashes set_dashes = set_linestyle = set_linestyles + def set_antialiased(self, aa): + """ + Set the antialiasing state for rendering. + + ACCEPTS: Boolean or sequence of booleans + """ + if aa is None: + aa = mpl.rcParams['patch.antialiased'] + self._antialiaseds = self._get_bool(aa) + set_antialiaseds = set_antialiased + def set_color(self, c): """ Set both the edgecolor and the facecolor. @@ -282,6 +296,7 @@ ACCEPTS: matplotlib color arg or sequence of rgba tuples """ + if c is None: c = mpl.rcParams['patch.facecolor'] self._facecolors = _colors.colorConverter.to_rgba_array(c, self._alpha) set_facecolors = set_facecolor @@ -298,16 +313,14 @@ ACCEPTS: matplotlib color arg or sequence of rgba tuples """ - if c == 'None': - self._linewidths = (0.0,) - self._edgecolors = npy.array([]) - else: - self._edgecolors = _colors.colorConverter.to_rgba_array(c) + if c is None: c = mpl.rcParams['patch.edgecolor'] + self._edgecolors = _colors.colorConverter.to_rgba_array(c, self._alpha) + set_edgecolors = set_edgecolor def set_alpha(self, alpha): """ - Set the alpha tranpancies of the collection. Alpha must be + Set the alpha tranparencies of the collection. Alpha must be a float. ACCEPTS: float @@ -316,9 +329,14 @@ except TypeError: raise TypeError('alpha must be a float') else: artist.Artist.set_alpha(self, alpha) - if len(self._facecolors): + try: self._facecolors[:, 3] = alpha - self._edgecolors[:, 3] = alpha + except (AttributeError, TypeError, IndexError): + pass + try: + self._edgecolors[:, 3] = alpha + except (AttributeError, TypeError, IndexError): + pass def get_linewidths(self): return self._linewidths @@ -334,7 +352,7 @@ from scalar data """ if self._A is None: return - if len(self._A.shape)>1: + if self._A.ndim > 1: raise ValueError('Collections can only map rank 1 arrays') if len(self._facecolors): self._facecolors = self.to_rgba(self._A, self._alpha) Modified: trunk/matplotlib/lib/matplotlib/colors.py =================================================================== --- trunk/matplotlib/lib/matplotlib/colors.py 2008-04-18 15:20:03 UTC (rev 5046) +++ trunk/matplotlib/lib/matplotlib/colors.py 2008-04-18 20:11:03 UTC (rev 5047) @@ -314,8 +314,18 @@ Accepts a single mpl color spec or a sequence of specs. If the sequence is a list or array, the items are changed in place, but an array copy is still returned. + + Special case to handle "no color": if c is "none" (case-insensitive), + then an empty array will be returned. Same for an empty list. """ try: + if c.lower() == 'none': + return npy.zeros((0,4), dtype=npy.float_) + except AttributeError: + pass + if len(c) == 0: + return npy.zeros((0,4), dtype=npy.float_) + try: result = [self.to_rgba(c, alpha)] except ValueError: # If c is a list it must be maintained as the same list This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |