サブプロットのハンドルが与えられた場合、関連するすべてのカラーバーハンドルを取得するにはどうすればよいですか?
質問
次のように、次のコードを考えてみましょう。
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
一致します Hc
.
解決
あなたのカラーバーは、あなたのサブプロット軸ではなく、姿の子供です(カラーバーはそれ自体が軸です)。試す
hc = get(hf, 'children')
人物のすべての子供のリストを取得するには、 hf
フィギュアハンドルです。どの要素がどのようになるかわかりません hc
あなたと同等です Hc
, 、つまり、それは first
ColorBar。
編集:
後でオブジェクトのハンドルを使用する必要がある場合は、作成時に変数に割り当てて、その変数を全体に使用することをお勧めします。
ただし、これをやりたくない場合(私はあなたがそうすることを強くお勧めしますが)、私はあなたができる2つのことを考えることができます。それらは特にエレガントではなく、オブジェクトを変数に割り当てるだけで、間違いなくより多くの作業です。
軸が作成された順序を知っている場合、あなたは幸運です:子供がいる場合、最初の子供は 過去 リストの要素と作成された最後の子供は 最初. 。例えば、
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
2番目の子供である最初のColorBarが必要なので、使用できます
hc(end-2)
あるいは、将来参照したいColorBarを作成するときは、設定してください tag
財産。上記の例では、行を交換します
hc1 = colorbar;
と
hc1 = colorbar('tag', 'myID');
その後、後でこのオブジェクトにハンドルを取得できます
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