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/[email protected]/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
> <[email protected]> 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
>> [email protected]
>> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users