Revision: 7085
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7085&view=rev
Author:   leejjoon
Date:     2009-05-05 17:27:23 +0000 (Tue, 05 May 2009)

Log Message:
-----------
Add Axes.get_legend_handles_labels method

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

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2009-05-05 03:27:48 UTC (rev 7084)
+++ trunk/matplotlib/CHANGELOG  2009-05-05 17:27:23 UTC (rev 7085)
@@ -1,4 +1,6 @@
 ======================================================================
+2009-05-05 Add Axes.get_legend_handles_labels method -JJL
+
 2009-05-04 Fix bug that Text.Annotation is still drawn while set to 
            not visible.-JJL
 

Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py     2009-05-05 03:27:48 UTC (rev 
7084)
+++ trunk/matplotlib/lib/matplotlib/axes.py     2009-05-05 17:27:23 UTC (rev 
7085)
@@ -3761,6 +3761,41 @@
         return lags, c, a, b
     xcorr.__doc__ = cbook.dedent(xcorr.__doc__) % martist.kwdocd
 
+
+    def _get_legend_handles(self):
+        "return artists that will be used as handles for legend"
+        handles = self.lines[:]
+        handles.extend(self.patches)
+        handles.extend([c for c in self.collections
+                        if isinstance(c, mcoll.LineCollection)])
+        handles.extend([c for c in self.collections
+                        if isinstance(c, mcoll.RegularPolyCollection)])
+        return handles
+
+
+    def get_legend_handles_labels(self):
+        """
+        return handles and labels for legend
+
+        ax.legend() is equibalent to ::
+
+          h, l = ax.get_legend_handles_labels()
+          ax.legend(h, l)
+        
+        """
+
+        handles = []
+        labels = []
+        for handle in self._get_legend_handles():
+            label = handle.get_label()
+            if (label is not None and
+                label != '' and not label.startswith('_')):
+                handles.append(handle)
+                labels.append(label)
+
+        return handles, labels
+
+
     def legend(self, *args, **kwargs):
         """
         call signature::
@@ -3867,24 +3902,8 @@
         .. plot:: mpl_examples/api/legend_demo.py
         """
 
-        def get_handles():
-            handles = self.lines[:]
-            handles.extend(self.patches)
-            handles.extend([c for c in self.collections
-                            if isinstance(c, mcoll.LineCollection)])
-            handles.extend([c for c in self.collections
-                            if isinstance(c, mcoll.RegularPolyCollection)])
-            return handles
-
         if len(args)==0:
-            handles = []
-            labels = []
-            for handle in get_handles():
-                label = handle.get_label()
-                if (label is not None and
-                    label != '' and not label.startswith('_')):
-                    handles.append(handle)
-                    labels.append(label)
+            handles, labels = self.get_legend_handles_labels()
             if len(handles) == 0:
                 warnings.warn("No labeled objects found. "
                               "Use label='...' kwarg on individual plots.")
@@ -3893,13 +3912,15 @@
         elif len(args)==1:
             # LABELS
             labels = args[0]
-            handles = [h for h, label in zip(get_handles(), labels)]
+            handles = [h for h, label in zip(self._get_legend_handles(),
+                                             labels)]
 
         elif len(args)==2:
             if is_string_like(args[1]) or isinstance(args[1], int):
                 # LABELS, LOC
                 labels, loc = args
-                handles = [h for h, label in zip(get_handles(), labels)]
+                handles = [h for h, label in zip(self._get_legend_handles(),
+                                                 labels)]
                 kwargs['loc'] = loc
             else:
                 # LINES, LABELS


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

------------------------------------------------------------------------------
The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your
production scanning environment may not be a perfect world - but thanks to
Kodak, there's a perfect scanner to get the job done! With the NEW KODAK i700
Series Scanner you'll get full speed at 300 dpi even with all image 
processing features enabled. http://p.sf.net/sfu/kodak-com
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to