以下面的代码为例:
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
。
使用以下脚本可以找到作为轴子的所有颜色条的句柄。这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
您的颜色条是图形的子级,而不是您的子图轴(颜色条本身就是轴)。尝试
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')