On Mon, Dec 29, 2008 at 10:17 AM, mfabulous <[email protected]> wrote:
>
> Hi,
>
> I apologize if this was asked before.
>
> I am trying to implement of a zoom lock over multiple subplots. I.e. I have
> four subplots where the xaxis stretches from some value xmin to some xmax.
> The range is the same for all four plots. Now if the user zooms into a
> different range in one of the four plots, I want to update the ranges of the
> other plots.
The best way to do this is to use shared axis
ax1 = subplot(211)
ax2 = subplot(212, sharex=ax1)
Then when you zoom in one, the xaxis in the other will be updated too.
>
> Something like:
> def onzoom():
> xmin, xmax = ZOOMED_PLOT.xlims()
> for SUBPLOTS_1-4:
> xlims(xmin, xmax)
>
> Now, I know how to update the xrange of an existing plot. But I do not know
> how to read the modified xrange after an interactive (e.g. rectangle) zoom.
> It seems to me that xlims() does not return the updated limits?
>
> Also, while I was able to work around this: Is there A way to directly react
> to a zoom event. Currently I caputre the mouse-button-released event, then
> try to check all ranges to figure out which one changed (which I actually
> don't know how to do due to my above mentioned problem) and update all
> ranges.
You can connect to the xlim_changed event::
ax1 = subplot(211)
def onchanged(ax):
print ax.get_xlim()
ax1.connect('xlim_changed', onchanged)
But using shared axes as described above is the way to go.
JDH
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users