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