Matlab 给定子批次的句柄,如何获取其所有关联的colorbar句柄?

Matlab 给定子批次的句柄,如何获取其所有关联的colorbar句柄?,matlab,handle,axes,colorbar,subplot,Matlab,Handle,Axes,Colorbar,Subplot,以下面的代码为例: Hsp=subplot(1,2,1); image(rand(5,5)); Hc=colorbar; subplot(1,2,2); image(rand(5,6)); colorbar; 我的问题是如何获得Hc,只要Hsp 众所周知,色条的类型是轴。所以我试着搜索子地块的所有子地块 Hs=findall(Hsp,'type','axes'); 但是,Hs中没有与Hc匹配的值。您的颜色条是图形的子图形,而不是子图形轴(颜色条本身就是轴)。试一试 要获取图形所有子

以下面的代码为例:

Hsp=subplot(1,2,1);

image(rand(5,5));

Hc=colorbar;

subplot(1,2,2);

image(rand(5,6));

colorbar;
我的问题是如何获得
Hc
,只要
Hsp

众所周知,色条的类型是轴。所以我试着搜索子地块的所有子地块

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

但是,
Hs
中没有与
Hc
匹配的值。您的颜色条是图形的子图形,而不是子图形轴(颜色条本身就是轴)。试一试

要获取图形所有子级的列表,其中
hf
是图形句柄。我不确定您如何确定
hc
的哪个元素等于您的
hc
,也就是说,哪个是
第一个
色条

编辑

如果以后需要使用对象的句柄,最好在创建对象时将其分配给变量,并始终使用该变量。

然而,如果你不想这样做(尽管我强烈建议你这么做),我可以想出两件你可以做的事情。它们不是特别优雅,而且肯定比仅仅将对象句柄分配给变量要复杂得多

如果您知道创建轴的顺序,那么您很幸运:在列表中,如果是子项,则创建的第一个子项是列表中的最后一个元素,创建的最后一个子项是第一个元素。比如说,

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
由于需要创建第一个颜色栏,这是创建的第二个子项,因此可以使用

hc(end-2)
或者,在创建将来要引用的颜色栏时,将其设置为
tag
属性。在上面的示例中,替换该行

hc1 = colorbar;

然后,您可以稍后使用获取该对象的句柄

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

使用以下脚本可以找到作为轴的子级的所有颜色条的句柄。这里,
Ha1
是带有图像的轴的句柄(例如子地块),
Hc1s
是轴的对等色条的句柄

function Hc1s = find_peer_colorbars_of_an_axes(Ha1)
    Hf = get(Ha1,'parent');
    Haxs = findobj(Hf,'type','axes');
    IsC=false(1,length(Haxs));
    Hc1s=[];

    for i=1:length(Haxs)
        if isa(handle(Haxs(i)),'scribe.colorbar');
            H=handle(Haxs(i));
            if isequal(double(H.axes),Ha1)
                Hc1s=[Hc1s,Haxs(i)];
            end
        end
    end

非常感谢。是的,这是图形的子图形。但是如果图形中有多个颜色条,如何确定哪个是轴的颜色条?@Xun我编辑了我的答案,以提供一些解决方案。但是,我重申,如果以后要使用,最好在创建对象时将句柄存储到对象,而不是在以后尝试查找句柄。谢谢您的回答。这很有帮助。但我找到了另一个解决方案,它可以找到匿名轴句柄的颜色条。受Matlab原始工具箱中find_colorbar.m函数的启发,我编写了一些脚本来查找对等轴的颜色条句柄。@Xun无需感谢我,只要确保你给出了有帮助的答案即可。此外,如果你自己找到了一个解决方案,你应该把它作为一个答案张贴出来——这可能对其他人有帮助。
findobj(hf, 'type', 'axes', 'tag', 'myID')
function Hc1s = find_peer_colorbars_of_an_axes(Ha1)
    Hf = get(Ha1,'parent');
    Haxs = findobj(Hf,'type','axes');
    IsC=false(1,length(Haxs));
    Hc1s=[];

    for i=1:length(Haxs)
        if isa(handle(Haxs(i)),'scribe.colorbar');
            H=handle(Haxs(i));
            if isequal(double(H.axes),Ha1)
                Hc1s=[Hc1s,Haxs(i)];
            end
        end
    end