Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

オブジェクトの検索

特定のプロパティ値をもつオブジェクトの検索

関数findobjはオブジェクト階層をスキャンして、特定のプロパティ値をもつオブジェクトのハンドルを取得できます。

識別のため、すべてのグラフィックス オブジェクトには、任意の文字ベクトルに設定できるTagプロパティがあります。これにより、特定のプロパティと値の組み合わせを検索することができます。たとえば、UI 内で非アクティブになることがあるチェック ボックスを作成するとします。Tagプロパティに固有の値を割り当てることで、その特定のオブジェクトを検索できます。

uicontrol('Style','checkbox','Tag','save option')

findobjを使って、Tagプロパティが'save option' に設定されているオブジェクトを見つけ、それを無効にします。

hCheckbox = findobj('Tag','save option'); hCheckbox.Enable ='off'

検索の開始オブジェクトを指定しない場合は、findobjは Root オブジェクトから検索し、指定したすべてのプロパティ名/ プロパティ値の組み合わせを探します。

ハンドルが非表示のオブジェクトを検索するには、findallを使用します。

字符串プロパティによるテキストの検索

この例では、字符串プロパティを使用して text オブジェクトを検索する方法を説明します。

次のグラフには、関数の特定の値をラベル付けする text オブジェクトが含まれています。

sin(t)=.707 という値をラベル付けするテキストを、現在位置[pi/4,sin(pi/4)]から関数が同じ値になる[3*pi/4,sin(3*pi/4)]の点 (グラフのライト グレーの部分) まで移動する場合を考えます。

[pi/4,sin(pi/4)]の点をラベル付けする text オブジェクトのハンドルを決定し、そのPositionプロパティを変更します。

findobjを使用するには、オブジェクトを一意的に識別するプロパティ値を選び出します。次の例では、テキストの字符串プロパティを使います。

hText = findobj('String','\leftarrowsin(t) = .707');

オブジェクトを新しい位置に移動し、座標軸の単位で Text のPositionを定義します。

hText.Position = [3*pi/4,sin(3*pi/4),0];

findobjは、root オブジェクトから検索を開始する代わりに、階層内の検索開始点を指定することによって、検索範囲を制限できます。オブジェクト ツリーに多数のオブジェクトが含まれる場合、この機能を使用すると検索が高速になります。前の例では、目的の text オブジェクトは現在の座標軸内にあるので、以下のように入力することができます。

hText = findobj(gca,'String','\leftarrowsin(t) = .707');

findobj での正規表現の使用

この例では、正規表現を使用して固有のプロパティ値を特定することでオブジェクト ハンドルを検索する方法を説明します。正規表現についての詳細は、regexpを参照してください。

以下のグラフを作成し、作成したオブジェクトのいくつかのプロパティを変更するとします。

x = 0:30; y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]'; h = stem(x,y); h(1).Marker ='o'; h(1).Tag ='Decaying Exponential'; h(2).Marker ='square'; h(2).Tag ='Growing Exponential'; h(3).Marker ='*'; h(3).Tag ='Steady State';

findobjに正規表現を渡すことで、特定のパターンに一致させることができます。たとえば、Tagプロパティが'Steady State'に "設定されていない"すべての stem オブジェクト (つまり、指数的な減衰または増加を表すステム) で、MarkerFaceColorプロパティの値を green に設定するとします。

hStems = findobj('-regexp','Tag','^(?!Steady State$).');fork = 1:length(hStems) hStems(k).MarkerFaceColor ='green'end

検索範囲の制限

検索範囲を制限するには、オブジェクト ツリーでの開始点を指定します。開始点には、Figure、座標軸またはオブジェクト ハンドルのグループのハンドルを指定できます。

たとえば、ある座標軸のステムのマーカー面の色を変更する場合を考えます。

x = 0:30; y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]'; tiledlayout(3,1) ax1 = nexttile; stem(x,y(:,1)) ax2 = nexttile; stem(x,y(:,2)) ax3 = nexttile; stem(x,y(:,3))

3 番目の座標軸のみにおけるステムのマーカー面の色を設定します。

h = findobj(ax3,'Type','stem'); h.MarkerFaceColor =“红色”;

オブジェクト検索の範囲および深さの制限についての詳細は、findobjfindallを参照してください。