From: Jeff W. <js...@fa...> - 2010-06-10 16:06:01
|
On 6/9/10 1:58 PM, Benjamin Root wrote: > Has anybody given any further thought to the implication of having > Basemap set adjustable as "box-forced" instead of "box"? So far, it > has been working just fine for me, but I have no clue if there are any > unintended side-effects. > > Ben Root Ben: To summarize the discussion so far, it seems that "box-forced" should not be used, and either Basemap should continue to use adjustable="box" (for the reasons Eric gave in his post yesterday) or adjustable should not be set at all by Basemap and that job should be left to the user (since adjustable='box' is the default anyway, as Jae-Joon pointed out today). Perhaps it would help if you could provide a usage example for AxesGrid axes sharing with Basemap, so we can see what the consequences of changing the current behavior are. -Jeff > > > On Tue, Jun 1, 2010 at 6:00 PM, Benjamin Root <ben...@ou... > <mailto:ben...@ou...>> wrote: > > Right, that is sort of what I am asking. My thinking is that > Basemap could use 'box-forced' instead of 'box' for the adjustable > parameter in order to make it and AxesGrid compatible. Usually, > if one wants to use AxesGrid, they all should have the same domain > and aspect ratio. I just have no clue what sort of repricussions > that has for other use cases. > > So far, this has worked just fine for me, but I hardly represent > the normal use cases of Basemap and AxesGrid. > > Ben Root > > > On Tue, Jun 1, 2010 at 5:20 PM, Jae-Joon Lee <lee...@gm... > <mailto:lee...@gm...>> wrote: > > If Basemap explicitly sets aspect=1 and adjustable="box" at > the same > time, you cannot use this with any axes that shares its axis with > others (including the axes created by the AxesGrid). > > You need to somehow avoid the set_aspect call with adjustable"box" > (you can set box-forced in stead). > > -JJ > > > On Tue, Jun 1, 2010 at 2:45 PM, Benjamin Root <ben...@ou... > <mailto:ben...@ou...>> wrote: > > > > 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...@gm... <mailto:lee...@gm...>> 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, <PH...@ge... > <mailto:PH...@ge...>> 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:ada...@gm... > <mailto:ada...@gm...>] > >> > 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 > >> > Mat...@li... > <mailto:Mat...@li...> > >> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > >> > > >> > > >> > >> > >> > ------------------------------------------------------------------------------ > >> > >> _______________________________________________ > >> Matplotlib-users mailing list > >> Mat...@li... > <mailto:Mat...@li...> > >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > > > ------------------------------------------------------------------------------ > > > > > > _______________________________________________ > > Matplotlib-devel mailing list > > Mat...@li... > <mailto:Mat...@li...> > > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel > > > > > > ------------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-devel mailing list > Mat...@li... > <mailto:Mat...@li...> > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel > > > -- Jeffrey S. Whitaker Phone : (303)497-6313 Meteorologist FAX : (303)497-6449 NOAA/OAR/PSD R/PSD1 Email : Jef...@no... 325 Broadway Office : Skaggs Research Cntr 1D-113 Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg |