2

以下面的代码为例:

Hsp=subplot(1,2,1);

image(rand(5,5));

Hc=colorbar;

subplot(1,2,2);

image(rand(5,6));

colorbar;

我的问题是如何获得Hc,仅给出Hsp

众所周知,颜色条的类型是axes. 所以我试图搜索子情节的所有孩子。

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

Hs但是, match没有任何价值Hc

4

2 回答 2

2

使用以下脚本可以找到作为轴子的所有颜色条的句柄。这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
于 2012-01-16T13:11:40.900 回答
1

您的颜色条是图形的子级,而不是您的子图轴(颜色条本身就是轴)。尝试

hc = get(hf, 'children')

获取图形所有子项的列表,hf图形句柄在哪里。我不知道你怎么会是哪个元素hc等于你的Hc,即哪个是first颜色条。

编辑

如果您以后需要使用对象的句柄,最好在创建它时将其分配给一个变量,并在整个过程中使用该变量。

但是,如果您不想这样做(尽管我强烈建议您这样做),我可以想到您可以做的两件事。它们并不是特别优雅,而且肯定比将对象句柄分配给变量需要更多的工作。

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

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;

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

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

findobj(hf, 'type', 'axes', 'tag', 'myID')
于 2012-01-13T11:16:53.387 回答