Revision: 7347
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7347&view=rev
Author:   jdh2358
Date:     2009-08-04 16:48:04 +0000 (Tue, 04 Aug 2009)

Log Message:
-----------
enabled legend picking

Modified Paths:
--------------
    trunk/matplotlib/lib/matplotlib/legend.py

Added Paths:
-----------
    trunk/matplotlib/examples/event_handling/legend_picking.py

Added: trunk/matplotlib/examples/event_handling/legend_picking.py
===================================================================
--- trunk/matplotlib/examples/event_handling/legend_picking.py                  
        (rev 0)
+++ trunk/matplotlib/examples/event_handling/legend_picking.py  2009-08-04 
16:48:04 UTC (rev 7347)
@@ -0,0 +1,36 @@
+"""
+Enable picking on the legend to toggle the legended line on and off
+"""
+import numpy as np
+import matplotlib.pyplot as plt
+
+t = np.arange(0.0, 0.2, 0.1)
+y1 = 2*np.sin(2*np.pi*t)
+y2 = 4*np.sin(2*np.pi*2*t)
+
+fig = plt.figure()
+ax = fig.add_subplot(111)
+
+line1, = ax.plot(t, y1, lw=2, color='red', label='1 hz')
+line2, = ax.plot(t, y2, lw=2, color='blue', label='2 hz')
+
+leg = ax.legend(loc='upper left', fancybox=True, shadow=True)
+leg.get_frame().set_alpha(0.4)
+
+
+lines = [line1, line2]
+lined = dict()
+for legline, realine in zip(leg.get_lines(), lines):
+    legline.set_picker(5)  # 5 pts tolerance
+    lined[legline] = realine
+
+def onpick(event):
+    legline = event.artist
+    realline = lined[legline]
+    vis = realline.get_visible()
+    realline.set_visible(not vis)
+    fig.canvas.draw()
+
+fig.canvas.mpl_connect('pick_event', onpick)
+
+plt.show()

Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py   2009-08-04 13:20:29 UTC (rev 
7346)
+++ trunk/matplotlib/lib/matplotlib/legend.py   2009-08-04 16:48:04 UTC (rev 
7347)
@@ -177,6 +177,10 @@
         propnames=['numpoints', 'markerscale', 'shadow', "columnspacing",
                    "scatterpoints"]
 
+        self.texts = []
+        self.legendHandles = []
+        self._legend_title_box = None
+        
         localdict = locals()
 
         for name in propnames:
@@ -240,6 +244,7 @@
 
         if isinstance(parent,Axes):
             self.isaxes = True
+            self.set_axes(parent)
             self.set_figure(parent.figure)
         elif isinstance(parent,Figure):
             self.isaxes = False
@@ -313,10 +318,8 @@
         set the boilerplate props for artists added to axes
         """
         a.set_figure(self.figure)
-
-        for c in self.get_children():
-            c.set_figure(self.figure)
-
+        if self.isaxes:
+            a.set_axes(self.axes)
         a.set_transform(self.get_transform())
 
 
@@ -432,6 +435,7 @@
             textbox = TextArea(l, textprops=label_prop,
                                multilinebaseline=True, minimumdescent=True)
             text_list.append(textbox._text)
+
             labelboxes.append(textbox)
 
         handleboxes = []
@@ -688,6 +692,13 @@
         children = []
         if self._legend_box:
             children.append(self._legend_box)
+        children.extend(self.get_lines())
+        children.extend(self.get_patches())
+        children.extend(self.get_texts())
+        children.append(self.get_frame())
+
+        if self._legend_title_box:
+            children.append(self.get_title())
         return children
 
     def get_frame(self):


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

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to