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.r...@ou.edu <mailto:ben.r...@ou.edu>> 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.j.j...@gmail.com
    <mailto:lee.j.j...@gmail.com>> 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.r...@ou.edu
        <mailto:ben.r...@ou.edu>> 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.j.j...@gmail.com <mailto: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
        <mailto: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
        <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
        <mailto:Matplotlib-users@lists.sourceforge.net>
        >> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users
        >> >
        >> >
        >>
        >>
        >>
        
------------------------------------------------------------------------------
        >>
        >> _______________________________________________
        >> Matplotlib-users mailing list
        >> Matplotlib-users@lists.sourceforge.net
        <mailto:Matplotlib-users@lists.sourceforge.net>
        >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
        >
        >
        >
        
------------------------------------------------------------------------------
        >
        >
        > _______________________________________________
        > Matplotlib-devel mailing list
        > matplotlib-de...@lists.sourceforge.net
        <mailto:matplotlib-de...@lists.sourceforge.net>
        > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel
        >
        >

        
------------------------------------------------------------------------------

        _______________________________________________
        Matplotlib-devel mailing list
        matplotlib-de...@lists.sourceforge.net
        <mailto:matplotlib-de...@lists.sourceforge.net>
        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  : jeffrey.s.whita...@noaa.gov
325 Broadway                Office : Skaggs Research Cntr 1D-113
Boulder, CO, USA 80303-3328 Web    : http://tinyurl.com/5telg


------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to