On a related note, I have noticed an incompatibility between AxesGrid and Basemap. It appears that Basemap will explicitly set adjustable='box' when it calls ax.set_aspect(), but AxesGrid will error out, saying that it has to be 'datalim'. What are the implications of using 'box-forced' instead of 'box' in Basemap?
Ben Root On Thu, May 27, 2010 at 1:59 PM, Jae-Joon Lee <lee.j.j...@gmail.com> wrote: > 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-us...@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > matplotlib-us...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users >
------------------------------------------------------------------------------
_______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel