[Matplotlib-users] Double zooming with twinx

Paul Smith wrote:

I'm plotting two curves in one subplot with twinx to allow different y scales. The script below is an example. When zooming in using zoom-to-rect on Tk's navigation toolbar2 (TkAgg is my backend) I think the x axis part of the zoom is happening twice. Rubberbanding the example from x=20 to 80 results in a zoomed x range of about 32 to 68, which is about what you'd expect for zooming with the same range twice.

Is there a way of restricting this to only one zoom?

Paul
------------
from pylab import *
f=figure(1)
ax1=f.add_subplot(111)
ax1.plot(arange(100))
ax2=twinx(ax1)
ax2.plot(-arange(100),'g')
draw()

Hi,
there was the above mail on the users list.

The problem is that "release_zoom" in backend_bases.py is called twice in the above case if zoomed to a twinx'ed plot. One way to fix this behavior is to set a "twin" attribute to the axes instance. Attached is a patch against the 0.91 trunk.

John: is this okay or is there a better way to fix the problem?

Manuel

twinzoom.patch (1.78 KB)

Manuel Metz wrote:

Paul Smith wrote:

I'm plotting two curves in one subplot with twinx to allow different y scales. The script below is an example. When zooming in using zoom-to-rect on Tk's navigation toolbar2 (TkAgg is my backend) I think the x axis part of the zoom is happening twice. Rubberbanding the example from x=20 to 80 results in a zoomed x range of about 32 to 68, which is about what you'd expect for zooming with the same range twice.
Is there a way of restricting this to only one zoom?

Paul
------------
from pylab import *
f=figure(1)
ax1=f.add_subplot(111)
ax1.plot(arange(100))
ax2=twinx(ax1)
ax2.plot(-arange(100),'g')
draw()

Hi,
there was the above mail on the users list.

The problem is that "release_zoom" in backend_bases.py is called twice in the above case if zoomed to a twinx'ed plot. One way to fix this behavior is to set a "twin" attribute to the axes instance. Attached is a patch against the 0.91 trunk.

John: is this okay or is there a better way to fix the problem?

Manuel

Ups - the last patch didn't work correctly since the y-axis of the twin'ed plot wasn't scaled correctly. So I try it again :wink:

Manuel

twinzoom.patch (3.71 KB)

Hi,

   I have fixed the double-zoom Bug in the trunk (revision 5053), but not in the 0_91maint branch. In 0.91 it's not so easy to find out whether an axes is shared with another (cbook:Group is nice :wink: ) For 0.91: is it always guaranteed that the release_zoom event for the master is called before that of the shared axes ? (I don't think so.) Then it would be more easy to test for the shared axes ...
   So there is still the old solution (see previous post) to introduce an argument twinx,twiny #%$(/"/'+*#*# I don't like that.

Manuel

Hey Manuel, thanks for fixng this. I don't think it is critical that
this be fixed on the maintenance branch since it is a relatively small
bug (only applies in twinned axes) but I have a minor suggestion for
you in the fix for the trunk. It is not a good idea for a class
outside the axes to access a "protected" "_twinx" attribute. Probably
better is to either make the attribute public by naming it "istwinx"
or something like that, or make a method.

JDH

···

On Mon, Apr 7, 2008 at 8:38 AM, Manuel Metz <mmetz@...459...> wrote:

The problem is that "release_zoom" in backend_bases.py is called twice in
the above case if zoomed to a twinx'ed plot. One way to fix this behavior is
to set a "twin" attribute to the axes instance. Attached is a patch against
the 0.91 trunk.

John: is this okay or is there a better way to fix the problem?