[Matplotlib-users] pick events don't work with twiny

Jody Klymak jklymak at uvic.ca
Tue Jan 30 12:08:58 EST 2018


Eric Firing took s stab at it a couple of years ago: https://github.com/matplotlib/matplotlib/pull/2986 <https://github.com/matplotlib/matplotlib/pull/2986>

Obviously this is hard - if you stick a couple of artists on top of one another, deciding which one gets a mouse event is ambiguous. 

I forget exactly how picking architecture works, but its seems *possible* to let each axes artist accept pick events.  Then they can duke it out over who actually does something with it.  But I’m not sure axes can actually do that at the present.

I also wonder if your `onpick` function can be made more sophisticated - I assume it knows what axis to look for picks in - maybe it could look in the twinned axis for a pick as well? 

Cheers,  Jody

> On 30 Jan 2018, at 08:27, Benjamin Root <ben.v.root at gmail.com> wrote:
> 
> I seem to recall someone once messing around with the zorder of the axes object, but I forget if that actually worked. Of course the other workaround is to make the axes with the pickable objects be the twined axes.
> 
> Ben Root
> 
> 
> On Tue, Jan 30, 2018 at 11:15 AM, Neal Becker <ndbecker2 at gmail.com <mailto:ndbecker2 at gmail.com>> wrote:
> Benjamin Root wrote:
> 
> > The problem is that the second axes is getting the pick events, because it
> > is on top of the first axes. This has been a problem for a long time, and
> > we haven't found a good solution for it.
> >
> > Ben Root
> >
> 
> That was my guess.  Is there any workaround?
> 
> > On Tue, Jan 30, 2018 at 10:10 AM, Neal Becker
> > <ndbecker2 at gmail.com <mailto:ndbecker2 at gmail.com>> wrote:
> >
> >> I find that pick events are fine until I add twiny.  In that case,
> >> nothing happens when clicking.
> >>
> >> THe code outline is like:
> >>
> >> fig, ax = plt.subplots()
> >> ax2 = ax.twiny()
> >> ax.semilogy(...)
> >> fig.canvas.mpl_connect('pick_event', onpick)
> >> ax2_xaxis = np.linspace (*ax.get_xlim(), endpoint=True,)/conversion
> >> ax2.semilogy (ax2_xaxis, np.ones (len(ax2_xaxis)) * 1e-3, alpha=0)
> >> ax2.set_xlabel(...)
> >> ...
> >>
> >> removing all the lines about ax2 will restore pick function.
> >>
> 
> 
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org <mailto:Matplotlib-users at python.org>
> https://mail.python.org/mailman/listinfo/matplotlib-users <https://mail.python.org/mailman/listinfo/matplotlib-users>
> 
> _______________________________________________
> Matplotlib-users mailing list
> Matplotlib-users at python.org
> https://mail.python.org/mailman/listinfo/matplotlib-users

--
Jody Klymak    
http://web.uvic.ca/~jklymak/





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20180130/c828718d/attachment.html>


More information about the Matplotlib-users mailing list