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&#174; 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&#174; 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

Reply via email to