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.joon@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,  <PHobson@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.fraser@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
>
>