divider.get_horizontal() returns a list of size objects (http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/api/axes_size_api.html#module-mpl_toolkits.axes_grid.axes_size) that are currently used.
For example, cax = divider.new_horizontal(size="5%", pad=0.05) horiz_list = divider.get_horizontal() horiz_list[0] is x-size of ax, horiz_list[1] is pad size, and horiz_list[2] is x-size of cax. You can modify those size objects (but usually they don't provide public interfaces). Or you can substitute any of them with a valid size object. horiz_list[1]._fixed_size = 0. # makes pad 0 inches horiz_list[2]._fraction = 0.1 # width of cax becomes 10% of the width of ax Or from mpl_toolkits.axes_grid.axes_size import Fixed, Fraction horiz_list[1] = Fixed(0.) horiz_list[2] = Fraction(0.1, horiz_list[0]) There are not much of documentation available, but this may be helpful. http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/axes_divider.html Regards, -JJ On Fri, Mar 5, 2010 at 3:38 PM, Thomas Robitaille <thomas.robitai...@gmail.com> wrote: > Hi Jae-Joon, > > Thanks for your help! One last question - if I create a colorbar axes with > > cax = divider.new_horizontal(size="5%", pad=0.05) > > Is it possible to then modify the size and pad parameters, or do I need to > delete the axes and start again? > > Cheers, > > Tom > > On Mar 5, 2010, at 12:20 PM, Jae-Joon Lee wrote: > >> Unfortunately, axes_grid toolkit (in most cases) creates an axes using >> its own Axes class by default. Here is some more details. >> >> http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.html#axisline >> >> To use mpl's original Axes class, append axes_class parameter. >> >> import matplotlib.axes as maxes >> cax = divider.new_horizontal(size="5%", pad=0.05, axes_class=maxes.Axes) >> >> Then your code should work. >> >> Just in case, with the axes_grid's own Axes class, instead of looping >> over major_ticks, you do >> >> cax.axis["left"].toggle(all=False) >> cax.axis["right"].toggle(all=True) >> >> Regards, >> >> -JJ >> >> >> On Fri, Mar 5, 2010 at 9:38 AM, Thomas Robitaille >> <thomas.robitai...@gmail.com> wrote: >>> Hi Jae-Joon, >>> >>> I am encountering another issue, when using the method you suggest in >>> combination with the parasite_axes from the matplotlib toolkit: >>> >>> --- >>> >>> import matplotlib.pyplot as mpl >>> import numpy as np >>> from mpl_toolkits.axes_grid import make_axes_locatable >>> import mpl_toolkits.axes_grid.parasite_axes as mpltk >>> >>> fig = mpl.figure() >>> >>> ax = mpltk.SubplotHost(fig, 1, 1, 1) >>> fig.add_axes(ax) >>> >>> divider = make_axes_locatable(ax) >>> >>> cax = divider.new_horizontal(size="5%", pad=0.05) >>> fig.add_axes(cax) >>> >>> image = ax.imshow(np.random.random((100,100))) >>> >>> cb = fig.colorbar(image, cax=cax) >>> >>> --- >>> >>> In the above case, the labels end up on the wrong side of the plot, and the >>> usual method for changing the label position, e.g.: >>> >>> for tick in cax.xaxis.get_major_ticks(): >>> tick.tick1On = True >>> tick.tick2On = True >>> tick.label1On = False >>> tick.label2On = True >>> >>> does not work. Do you have any idea why this might be? >>> >>> Thanks for any help, >>> >>> Thomas >>> >>> >>> >>> On Mar 4, 2010, at 10:28 PM, Jae-Joon Lee wrote: >>> >>>> see >>>> >>>> http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg15919.html >>>> >>>> axes_grid toolkit provides some helper function that utilizes >>>> axes_locator (take a look at demo_locatable_axes_easy function in the >>>> example below) >>>> >>>> http://matplotlib.sourceforge.net/examples/axes_grid/demo_axes_divider.html >>>> >>>> -JJ >>>> >>>> >>>> >>>> >>>> On Thu, Mar 4, 2010 at 9:05 PM, Thomas Robitaille >>>> <thomas.robitai...@gmail.com> wrote: >>>>> Hi, >>>>> >>>>> I am trying to set up a colorbar that automatically resizes if I zoom in >>>>> to an image (which changes the aspect ratio of the axes, so I want the >>>>> colorbar to get resized too). Let's say I have two Axes instances, say ax >>>>> (for the main image) and cax (for the colorbar). I can set up a callback >>>>> if the view limits in one axes change, for example >>>>> >>>>> ax.callbacks.connect('xlim_changed', update_colorbar) >>>>> ax.callbacks.connect('ylim_changed', update_colorbar) >>>>> >>>>> Now I can store a reference to cax inside ax: >>>>> >>>>> ax._cax = cax >>>>> >>>>> And I can now define update_colorbar so that it basically changes the >>>>> position of cax: >>>>> >>>>> def update_colorbar(ax): >>>>> >>>>> # Get current position >>>>> xmin = ax..get_position().xmin >>>>> ... >>>>> >>>>> # Compute new colorbar position >>>>> ... >>>>> >>>>> # Set new position >>>>> ax._cax.set_position(...) >>>>> >>>>> # Return axes instance >>>>> return ax >>>>> >>>>> Now the issue is that if I select a region of the image to zoom into, >>>>> then as soon as I've selected the region, update_colorbar gets called, >>>>> but by then, the aspect ratio of ax hasn't changed, and so the position I >>>>> find when I do xmin = ax..get_position().xmin in update_colorbar is the >>>>> *old* position of ax, not the new one. So the colorbar position is always >>>>> one step behind compared to the main image axes. >>>>> >>>>> Can anyone think of any way that would avoid this issue, and to be able >>>>> to use the *new* position of ax inside update_colorbar? >>>>> >>>>> Thanks in advance for any help, >>>>> >>>>> Thomas >>>>> ------------------------------------------------------------------------------ >>>>> Download Intel® Parallel Studio Eval >>>>> Try the new software tools for yourself. Speed compiling, find bugs >>>>> proactively, and fine-tune applications for parallel performance. >>>>> See why Intel Parallel Studio got high marks during beta. >>>>> http://p.sf.net/sfu/intel-sw-dev >>>>> _______________________________________________ >>>>> Matplotlib-users mailing list >>>>> Matplotlib-users@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users >>>>> >>> >>> > > ------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users