Search code examples
matlabhandleaxescolorbarsubplot

Given a handle of a subplot, how to obtain all its associated colorbar handles?


Take the follow code for example:

Hsp=subplot(1,2,1);

image(rand(5,5));

Hc=colorbar;

subplot(1,2,2);

image(rand(5,6));

colorbar;

My question is how to obtain Hc, given only Hsp.

As is known, the type of a colorbar is axes. So I tried to search all the children of the subplot.

Hs=findall(Hsp,'type','axes');

But, there is no value in Hs which matches Hc.


Solution

  • Your colorbars are children of the figure, not of your subplot axes (colorbars are themselves axes). Try

    hc = get(hf, 'children')
    

    to get a list of all children of the figure, where hf is the figure handle. I'm not sure how you would which element of hc is equal to your Hc, i.e. which is the first colorbar.

    Edit:

    If you need to use an object's handle later on, it is best to assign it to a variable when it is created and to use that variable throughout.

    However, if you don't want to do this (although I strongly recommend that you do) I can think of two things you can do. They are not particularly elegant and are definitely more work that just assigning your object handle to a variable.

    If you know the order in which the axes were created then you are in luck: in the list if children, the first child created is the last element in the list and the last child created is the first. For example,

    hf = figure;
    
    ha1 = subplot(1,2,1);
    image(rand(5,5));
    hc1 = colorbar;
    
    ha2 = subplot(1,2,2);
    image(rand(5,5));
    hc2 = colorbar;
    
    hcs = get(hf, 'children')
    
    hcs =
    
      206.0016
      204.0011
      176.0016
      174.0011
    
    [hc2, ha2, hc1, ha1]'
    
    ans =
    
      206.0016
      204.0011
      176.0016
      174.0011
    

    Since you want the first colorbar, which was the second child created, you can then use

    hc(end-2)
    

    Alternatively, when creating the colorbar which you want to refer to in the future, set it's tag property. In the above example, replace the line

    hc1 = colorbar;
    

    with

    hc1 = colorbar('tag', 'myID');
    

    You can then get the handle to this object later with

    findobj(hf, 'type', 'axes', 'tag', 'myID')