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一致する値はありません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

カラーバーは、サブプロット軸ではなく、Figure の子です (カラーバー自体が軸です)。試す

hc = get(hf, 'children')

Figure のすべての子のリストを取得しますhf。 は Figure ハンドルです。hcのどの要素があなたの と等しいかHc、つまりどのカラーバーがどのようになるかわかりませんfirst

編集

オブジェクトのハンドルを後で使用する必要がある場合は、オブジェクトの作成時に変数に割り当て、その変数全体を使用することをお勧めします。

ただし、これを行いたくない場合 (私は強くお勧めしますが)、できることを 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番目の子である最初のカラーバーが必要なので、次を使用できます

hc(end-2)

または、後で参照するカラーバーを作成するときに、そのプロパティを設定しtagます。上記の例では、行を置き換えます

hc1 = colorbar;

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

その後、後でこのオブジェクトへのハンドルを取得できます

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