Revision: 6387
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6387&view=rev
Author:   efiring
Date:     2008-11-11 06:52:52 +0000 (Tue, 11 Nov 2008)

Log Message:
-----------
Fix handling of c kwarg in scatter, with array of strings;
modification of patch by Ryan May.  The fix involves making
cbook.is_string_like handle variables of type numpy.string_.

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/lib/matplotlib/axes.py
    trunk/matplotlib/lib/matplotlib/cbook.py
    trunk/matplotlib/lib/matplotlib/colors.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2008-11-10 22:41:27 UTC (rev 6386)
+++ trunk/matplotlib/CHANGELOG  2008-11-11 06:52:52 UTC (rev 6387)
@@ -1,4 +1,8 @@
-2008-11-09 Fix a possible EINTR problem in dviread, which might help 
+2008-11-10 Fix handling of c kwarg by scatter; generalize
+           is_string_like to accept numpy and numpy.ma string
+           array scalars. - RM and EF
+
+2008-11-09 Fix a possible EINTR problem in dviread, which might help
            when saving pdf files from the qt backend. - JKS
 
 2008-10-24 Added Jae Joon's fancy arrow, box and annotation

Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py     2008-11-10 22:41:27 UTC (rev 
6386)
+++ trunk/matplotlib/lib/matplotlib/axes.py     2008-11-11 06:52:52 UTC (rev 
6387)
@@ -4927,17 +4927,17 @@
 
         x, y, s, c = cbook.delete_masked_points(x, y, s, c)
 
-        # The inherent ambiguity is resolved in favor of color
-        # mapping, not interpretation as rgb or rgba.
 
-        if not is_string_like(c):
+        if is_string_like(c) or cbook.is_sequence_of_strings(c):
+            colors = mcolors.colorConverter.to_rgba_array(c, alpha)
+        else:
             sh = np.shape(c)
+            # The inherent ambiguity is resolved in favor of color
+            # mapping, not interpretation as rgb or rgba:
             if len(sh) == 1 and sh[0] == len(x):
                 colors = None  # use cmap, norm after collection is created
             else:
                 colors = mcolors.colorConverter.to_rgba_array(c, alpha)
-        else:
-            colors = mcolors.colorConverter.to_rgba_array(c, alpha)
 
         if not iterable(s):
             scales = (s,)

Modified: trunk/matplotlib/lib/matplotlib/cbook.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/cbook.py    2008-11-10 22:41:27 UTC (rev 
6386)
+++ trunk/matplotlib/lib/matplotlib/cbook.py    2008-11-11 06:52:52 UTC (rev 
6387)
@@ -266,8 +266,14 @@
 
 
 def is_string_like(obj):
-    'return true if *obj* looks like a string'
-    if hasattr(obj, 'shape'): return False
+    'Return True if *obj* looks like a string'
+    if isinstance(obj, (str, unicode)): return True
+    # numpy strings are subclass of str, ma strings are not
+    if ma.isMaskedArray(obj):
+        if obj.ndim == 0 and obj.dtype.kind in 'SU':
+            return True
+        else:
+            return False
     try: obj + ''
     except (TypeError, ValueError): return False
     return True

Modified: trunk/matplotlib/lib/matplotlib/colors.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/colors.py   2008-11-10 22:41:27 UTC (rev 
6386)
+++ trunk/matplotlib/lib/matplotlib/colors.py   2008-11-11 06:52:52 UTC (rev 
6387)
@@ -320,11 +320,9 @@
 
     def to_rgba_array(self, c, alpha=None):
         """
-        Returns an Numpy array of *RGBA* tuples.
+        Returns a numpy array of *RGBA* tuples.
 
         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.
@@ -339,11 +337,8 @@
         try:
             result = np.array([self.to_rgba(c, alpha)], dtype=np.float_)
         except ValueError:
-            # If c is a list it must be maintained as the same list
-            # with modified items so that items can be appended to
-            # it. This is needed for examples/dynamic_collections.py.
             if isinstance(c, np.ndarray):
-                if len(c.shape) != 2:
+                if c.ndim != 2 and c.dtype.kind not in 'SU':
                     raise ValueError("Color array must be two-dimensional")
 
             result = np.zeros((len(c), 4))


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
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-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to