ax1 = subplot(121) ax2 = subplot(122, sharex=ax1, sharey=ax1) ax1.set_adjustable("box-forced") ax2.set_adjustable("box-forced")
arr1 = np.arange(100).reshape((10, 10)) ax1.imshow(arr1) arr2 = np.arange(100, 0, -1).reshape((10, 10)) ax2.imshow(arr2) Note the use of set_adjustable("box-forced"). sharex and sharey does not get along with axes of aspect=1 & adjustable="box". -JJ On Thu, May 27, 2010 at 2:10 PM, <phob...@geosyntec.com> wrote: > Do the “sharex” and “sharey” kwargs help? > > http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.axes > > http://matplotlib.sourceforge.net/examples/pylab_examples/shared_axis_demo.html > > -paul > > > > From: Adam Fraser [mailto:adam.n.fra...@gmail.com] > Sent: Thursday, May 27, 2010 10:44 AM > To: matplotlib-users > Subject: [Matplotlib-users] Is there a way to link axes of imshow plots? > > > > Suppose I have a figure canvas with 3 plots... 2 are images of the same > dimensions plotted with imshow, and the other is a scatterplot. I'd like to > be able to link the x and y axes of the imshow plots so that when I zoom in > one, the other zooms to the same coordinates, and when I pan in one, the > other pans as well. > > > > I started hacking my way around this by subclassing NavigationToolbar2WxAgg > (shown below)... but there are several problems here. > > 1) This will link the axes of all plots in a canvas since all I've done is > get rid of the checks for a.in_axes() > > 2) This worked well for panning, but zooming caused all subplots to zoom > from the same global point, rather than from the same point in each of their > respective axes. > > > > Can anyone suggest a workaround? > > > > Much thanks! > > -Adam > > > > from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as > NavigationToolbar > > class MyNavToolbar(NavigationToolbar): > > def __init__(self, canvas, cpfig): > > NavigationToolbar.__init__(self, canvas) > > > > # override > > def press_pan(self, event): > > 'the press mouse button in pan/zoom mode callback' > > > > if event.button == 1: > > self._button_pressed=1 > > elif event.button == 3: > > self._button_pressed=3 > > else: > > self._button_pressed=None > > return > > > > x, y = event.x, event.y > > > > # push the current view to define home if stack is empty > > if self._views.empty(): self.push_current() > > > > self._xypress=[] > > for i, a in enumerate(self.canvas.figure.get_axes()): > > # only difference from overridden method is that this one > doesn't > > # check a.in_axes(event) > > if x is not None and y is not None and a.get_navigate(): > > a.start_pan(x, y, event.button) > > self._xypress.append((a, i)) > > self.canvas.mpl_disconnect(self._idDrag) > > self._idDrag=self.canvas.mpl_connect('motion_notify_event', > self.drag_pan) > > > > def press_zoom(self, event): > > 'the press mouse button in zoom to rect mode callback' > > if event.button == 1: > > self._button_pressed=1 > > elif event.button == 3: > > self._button_pressed=3 > > else: > > self._button_pressed=None > > return > > > > x, y = event.x, event.y > > > > # push the current view to define home if stack is empty > > if self._views.empty(): self.push_current() > > > > self._xypress=[] > > for i, a in enumerate(self.canvas.figure.get_axes()): > > # only difference from overridden method is that this one > doesn't > > # check a.in_axes(event) > > if x is not None and y is not None and a.get_navigate() and > a.can_zoom(): > > self._xypress.append(( x, y, a, i, a.viewLim.frozen(), > a.transData.frozen())) > > > > self.press(event) > > > > > > > > ------------------------------------------------------------------------------ > > > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > ------------------------------------------------------------------------------ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users