6

次のスタックオーバーフローの質問:

Matlab:フィギュアハンドルのすべての軸ハンドルを取得するには?

Matlab の Figure からすべての軸へのハンドルを取得する方法を識別します。ただし、このリストには、少なくとも R2008a では、軸にも見える凡例へのハンドルも含まれます。軸ハンドルのベクトルで実際のプロット軸から凡例を (プログラムで) 伝えるにはどうすればよいですか?

4

3 に答える 3

12

からlinkaxes、必要なコードは次のとおりです。

ax = findobj(gcf,'type','axes','-not','Tag','legend','-not','Tag','Colorbar');

これにより、現在の Figure 内のすべてのデータ軸のハンドルが返されます。

于 2012-01-30T23:47:25.760 に答える
6

1) デフォルトではTag、凡例のプロパティは 'Legend' です。もちろん、変わらないという約束はありません。

 get(l)

 ....
 BusyAction: 'queue'
      HandleVisibility: 'on'
               HitTest: 'on'
         Interruptible: 'off'
              Selected: 'off'
    SelectionHighlight: 'on'
                   **Tag: 'legend'**
                  Type: 'axes'
         UIContextMenu: 200.0018
              UserData: [1x1 struct]

 ....

2) もう 1 つの違い (より堅牢です) は、通常の軸にはプロパティがありませんがString、凡例にはプロパティがあることです。Stringプロパティを持つ他のタイプのオブジェクトがあるかどうかはわかりません。例えば:

  plot(magic(3));legend('a','v','b');
  allAxesInFigure = findall(f,'type','axes')
  b = isprop(allAxesInFigure,'String')

次のように呼び出して確認できます。

get(gca,'文字列')
??? ==> get の使用エラー
「軸」クラスに「文字列」プロパティがありません。

しかし一方で、伝説にそのような性質があります。そのため、より堅牢です。

 plot(magic(3)); l = legend('a','b','c');
 get(l,'String')

ans = 'a' 'b' 'c'

3) より広い文脈でこれを解決することをお勧めします。ハンドルを格納して、作成した凡例と軸を追跡するだけです。つまり、次のようにコーディングする代わりに:

 plot(magic(3));
 legend('a','v','b');
 plot(magic(5));
 legend('a','v','b','c','d');

次のようなコード:

 p(1) = plot(magic(3));
 l(1) = legend('a','v','b');
 p(2) = plot(magic(5));
 l(2) = legend('a','v','b','c','d');
于 2012-01-30T22:58:29.357 に答える