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.joon@…149…> 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@…855…> 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@…149…]
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.
- 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()
- 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
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