|
From: <lee...@us...> - 2010-11-09 07:47:00
|
Revision: 8784
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8784&view=rev
Author: leejjoon
Date: 2010-11-09 07:46:54 +0000 (Tue, 09 Nov 2010)
Log Message:
-----------
DraggableLegend can optionally update *bbox_to_anchor* instead of *loc*
Modified Paths:
--------------
trunk/matplotlib/lib/matplotlib/legend.py
Modified: trunk/matplotlib/lib/matplotlib/legend.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/legend.py 2010-11-09 06:57:17 UTC (rev 8783)
+++ trunk/matplotlib/lib/matplotlib/legend.py 2010-11-09 07:46:54 UTC (rev 8784)
@@ -39,8 +39,19 @@
class DraggableLegend(DraggableOffsetBox):
- def __init__(self, legend, use_blit=False):
+ def __init__(self, legend, use_blit=False, update="loc"):
+ """
+ update : If "loc", update *loc* parameter of
+ legend upon finalizing. If "bbox", update
+ *bbox_to_anchor* parameter.
+ """
self.legend=legend
+
+ if update in ["loc", "bbox"]:
+ self._update = update
+ else:
+ raise ValueError("update parameter '%s' is not supported." % update)
+
DraggableOffsetBox.__init__(self, legend, legend._legend_box,
use_blit=use_blit)
@@ -50,6 +61,14 @@
def finalize_offset(self):
loc_in_canvas = self.get_loc_in_canvas()
+ if self._update == "loc":
+ self._update_loc(loc_in_canvas)
+ elif self._update == "bbox":
+ self._update_bbox_to_anchor(loc_in_canvas)
+ else:
+ raise RuntimeError("update parameter '%s' is not supported." % self.update)
+
+ def _update_loc(self, loc_in_canvas):
bbox = self.legend.get_bbox_to_anchor()
# if bbox has zero width or height, the transformation is
@@ -62,6 +81,14 @@
self.legend._loc = tuple(_bbox_transform.transform_point(loc_in_canvas))
+ def _update_bbox_to_anchor(self, loc_in_canvas):
+
+ tr = self.legend.axes.transAxes
+ loc_in_bbox = tr.transform_point(loc_in_canvas)
+
+ self.legend.set_bbox_to_anchor(loc_in_bbox)
+
+
class Legend(Artist):
"""
Place a legend on the axes at location loc. Labels are a
@@ -931,7 +958,7 @@
return ox, oy
- def draggable(self, state=None, use_blit=False):
+ def draggable(self, state=None, use_blit=False, update="loc"):
"""
Set the draggable state -- if state is
@@ -944,6 +971,10 @@
If draggable is on, you can drag the legend on the canvas with
the mouse. The DraggableLegend helper instance is returned if
draggable is on.
+
+ The update parameter control which parameter of the legend changes
+ when dragged. If update is "loc", the *loc* paramter of the legend
+ is changed. If "bbox", the *bbox_to_anchor* parameter is changed.
"""
is_draggable = self._draggable is not None
@@ -953,7 +984,7 @@
if state:
if self._draggable is None:
- self._draggable = DraggableLegend(self, use_blit)
+ self._draggable = DraggableLegend(self, use_blit, update=update)
else:
if self._draggable is not None:
self._draggable.disconnect()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|