SourceForge logo
SourceForge logo
Menu

matplotlib-users

From: Adam F. <ada...@gm...> - 2010年01月28日 21:03:01
I thought I'd share a solution to the draggable legend problem since
it took me forever to assimilate all the scattered knowledge on the
mailing lists...
class DraggableLegend:
 def __init__(self, legend):
 self.legend = legend
 self.gotLegend = False
 legend.figure.canvas.mpl_connect('motion_notify_event', self.on_motion)
 legend.figure.canvas.mpl_connect('pick_event', self.on_pick)
 legend.figure.canvas.mpl_connect('button_release_event',
self.on_release)
 legend.set_picker(self.my_legend_picker)
 def on_motion(self, evt):
 if self.gotLegend:
 dx = evt.x - self.mouse_x
 dy = evt.y - self.mouse_y
 loc_in_canvas = self.legend_x + dx, self.legend_y + dy
 loc_in_norm_axes =
self.legend.parent.transAxes.inverted().transform_point(loc_in_canvas)
 self.legend._loc = tuple(loc_in_norm_axes)
 self.legend.figure.canvas.draw()
 def my_legend_picker(self, legend, evt):
 return self.legend.legendPatch.contains(evt)
 def on_pick(self, evt):
 legend = self.legend
 if evt.artist == legend:
 bbox = self.legend.get_window_extent()
 self.mouse_x = evt.mouseevent.x
 self.mouse_y = evt.mouseevent.y
 self.legend_x = bbox.xmin
 self.legend_y = bbox.ymin
 self.gotLegend = 1
 def on_release(self, event):
 if self.gotLegend:
 self.gotLegend = False
#...and in your code...
def draw(self):
 ax = self.figure.add_subplot(111)
 scatter = ax.scatter(np.random.randn(100), np.random.randn(100))
 legend = DraggableLegend(ax.legend())
From: John H. <jd...@gm...> - 2010年01月28日 21:48:58
On Thu, Jan 28, 2010 at 3:02 PM, Adam Fraser <ada...@gm...> wrote:
> I thought I'd share a solution to the draggable legend problem since
> it took me forever to assimilate all the scattered knowledge on the
> mailing lists...
Cool -- nice example. I added the code to legend.py. Now you can do
leg = ax.legend()
leg.draggable()
to enable draggable mode. You can repeatedly call this func to toggle
the draggable state.
Thanks,
JDH
From: Gökhan S. <gok...@gm...> - 2010年01月29日 00:57:36
On Thu, Jan 28, 2010 at 3:48 PM, John Hunter <jd...@gm...> wrote:
> On Thu, Jan 28, 2010 at 3:02 PM, Adam Fraser <ada...@gm...>
> wrote:
> > I thought I'd share a solution to the draggable legend problem since
> > it took me forever to assimilate all the scattered knowledge on the
> > mailing lists...
>
> Cool -- nice example. I added the code to legend.py. Now you can do
>
> leg = ax.legend()
> leg.draggable()
>
> to enable draggable mode. You can repeatedly call this func to toggle
> the draggable state.
>
> Thanks,
> JDH
>
Very useful addition for me. One question
In [8]: ax.leg<tab>
ax.legend ax.legend_
Has the second instance forgotten or left on purpose?
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the
> business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
-- 
Gökhan
From: Christopher B. <Chr...@no...> - 2010年01月29日 04:00:21
> On Thu, Jan 28, 2010 at 3:48 PM, John Hunter <jd...@gm... 
> Cool -- nice example. I added the code to legend.py. Now you can do
> 
> leg = ax.legend()
> leg.draggable()
> 
> to enable draggable mode. You can repeatedly call this func to toggle
> the draggable state.
Might I suggest that that be made:
leg.draggable(True)
leg.draggable(False)
or
leg.draggable('on')
leg.draggable('off')
or even a property:
leg.draggable = True
or some such. I'd be nice not to have to keep track of the current state.
-Chris
-- 
Christopher Barker, Ph.D.
Oceanographer
NOAA/OR&R/HAZMAT (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
From: Fernando P. <fpe...@gm...> - 2010年01月29日 04:14:24
On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
<Chr...@no...> wrote:
> Might I suggest that that be made:
>
> leg.draggable(True)
> leg.draggable(False)
>
Agreed. My favorite api for toggles is:
_state = True
def toggle(state=None):
 global _state
 old = _state
 if state is None:
 _state = not _state
 else:
 _state = state
 return old
###
This lets you:
- toggle without arguments
- set state specifically as needed
- save previous state before setting it if you need to make temporary changes.
Cheers,
f
From: Michele M. <mat...@gm...> - 2010年01月29日 09:46:33
Good job!
+1
On Fri, Jan 29, 2010 at 4:14 AM, Fernando Perez <fpe...@gm...>wrote:
> On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
> <Chr...@no...> wrote:
> > Might I suggest that that be made:
> >
> > leg.draggable(True)
> > leg.draggable(False)
> >
>
> Agreed. My favorite api for toggles is:
>
> _state = True
>
> def toggle(state=None):
> global _state
> old = _state
> if state is None:
> _state = not _state
> else:
> _state = state
> return old
>
> ###
>
> This lets you:
>
> - toggle without arguments
> - set state specifically as needed
> - save previous state before setting it if you need to make temporary
> changes.
>
> Cheers,
>
> f
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the
> business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
From: John H. <jd...@gm...> - 2010年01月29日 15:28:34
On Thu, Jan 28, 2010 at 10:14 PM, Fernando Perez <fpe...@gm...> wrote:
> On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
> <Chr...@no...> wrote:
>> Might I suggest that that be made:
>>
>> leg.draggable(True)
>> leg.draggable(False)
>>
>
> Agreed. My favorite api for toggles is:
>
> _state = True
OK, this is committed. Thanks for the suggestion.
JDH
From: Jae-Joon L. <lee...@gm...> - 2010年01月29日 17:41:19
I did some refactoring and now the annotation is also draggable..
I also added an example,
examples/animation/draggable_legend.py
Regards,
-JJ
On Fri, Jan 29, 2010 at 10:28 AM, John Hunter <jd...@gm...> wrote:
> On Thu, Jan 28, 2010 at 10:14 PM, Fernando Perez <fpe...@gm...> wrote:
>> On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
>> <Chr...@no...> wrote:
>>> Might I suggest that that be made:
>>>
>>> leg.draggable(True)
>>> leg.draggable(False)
>>>
>>
>> Agreed. My favorite api for toggles is:
>>
>> _state = True
>
> OK, this is committed. Thanks for the suggestion.
>
> JDH
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
From: Jae-Joon L. <lee...@gm...> - 2010年01月29日 18:04:14
added blitting support.
-JJ
On Fri, Jan 29, 2010 at 12:40 PM, Jae-Joon Lee <lee...@gm...> wrote:
> I did some refactoring and now the annotation is also draggable..
> I also added an example,
>
> examples/animation/draggable_legend.py
>
> Regards,
>
> -JJ
>
>
>
> On Fri, Jan 29, 2010 at 10:28 AM, John Hunter <jd...@gm...> wrote:
>> On Thu, Jan 28, 2010 at 10:14 PM, Fernando Perez <fpe...@gm...> wrote:
>>> On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
>>> <Chr...@no...> wrote:
>>>> Might I suggest that that be made:
>>>>
>>>> leg.draggable(True)
>>>> leg.draggable(False)
>>>>
>>>
>>> Agreed. My favorite api for toggles is:
>>>
>>> _state = True
>>
>> OK, this is committed. Thanks for the suggestion.
>>
>> JDH
>>
>> ------------------------------------------------------------------------------
>> The Planet: dedicated and managed hosting, cloud storage, colocation
>> Stay online with enterprise data centers and the best network in the business
>> Choose flexible plans and management services without long-term contracts
>> Personal 24x7 support from experience hosting pros just a phone call away.
>> http://p.sf.net/sfu/theplanet-com
>> _______________________________________________
>> Matplotlib-users mailing list
>> Mat...@li...
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>
>
From: Gökhan S. <gok...@gm...> - 2010年01月29日 18:42:49
One minor issue with the example is once you drag one of the items (legend
or text or image) out of the plotting area there is no way to move them back
unless you restart the example.
Do you get the same defect?
On Fri, Jan 29, 2010 at 11:40 AM, Jae-Joon Lee <lee...@gm...> wrote:
> I did some refactoring and now the annotation is also draggable..
> I also added an example,
>
> examples/animation/draggable_legend.py
>
> Regards,
>
> -JJ
>
>
>
> On Fri, Jan 29, 2010 at 10:28 AM, John Hunter <jd...@gm...> wrote:
> > On Thu, Jan 28, 2010 at 10:14 PM, Fernando Perez <fpe...@gm...>
> wrote:
> >> On Thu, Jan 28, 2010 at 8:01 PM, Christopher Barker
> >> <Chr...@no...> wrote:
> >>> Might I suggest that that be made:
> >>>
> >>> leg.draggable(True)
> >>> leg.draggable(False)
> >>>
> >>
> >> Agreed. My favorite api for toggles is:
> >>
> >> _state = True
> >
> > OK, this is committed. Thanks for the suggestion.
> >
> > JDH
> >
> >
> ------------------------------------------------------------------------------
> > The Planet: dedicated and managed hosting, cloud storage, colocation
> > Stay online with enterprise data centers and the best network in the
> business
> > Choose flexible plans and management services without long-term contracts
> > Personal 24x7 support from experience hosting pros just a phone call
> away.
> > http://p.sf.net/sfu/theplanet-com
> > _______________________________________________
> > Matplotlib-users mailing list
> > Mat...@li...
> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
> >
>
>
> ------------------------------------------------------------------------------
> The Planet: dedicated and managed hosting, cloud storage, colocation
> Stay online with enterprise data centers and the best network in the
> business
> Choose flexible plans and management services without long-term contracts
> Personal 24x7 support from experience hosting pros just a phone call away.
> http://p.sf.net/sfu/theplanet-com
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
-- 
Gökhan
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /