As Eric told, you need to build it from the "svn". Unfortunately, no released version (I believe) includes this feature.
http://matplotlib.sourceforge.net/faq/installing_faq.html#install-from-svn Anyhow, the patch for "box-forced" involves only a few lines of change. You may consider to apply it by yourself (or do some monkey patching). Regards, -JJ On Tue, Jun 1, 2010 at 2:11 PM, Adam Fraser <adam.n.fra...@gmail.com> wrote: > Hi all, I updated to version 99.1.1 and I'm still getting the error > "ValueError: argument must be "box", or "datalim" at set_adjustable..." > from axes.py > when I try to do ax.set_adjustable("box-forced") as you suggested. > -Adam > > > On Thu, May 27, 2010 at 3:08 PM, Adam Fraser <adam.n.fra...@gmail.com> > wrote: >> >> Thanks very much, >> I'm getting ValueError: argument must be "box", or "datalim" at >> set_adjustable... >> I'm using Matplotlib version 0.98.5.3, do I need to update? >> >> On Thu, May 27, 2010 at 2: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-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