15.4.6 オブジェクトグループ
Octaveの高水準プロット関数の多くは、他のグラフィックオブジェクトのグループを返すか、プロパティの1つを変更すると他のプロパティも変更されるようにプロパティがリンクされたグラフィックオブジェクトを返します。他のオブジェクトをグループ化するグラフィックオブジェクトは、hggroup
: hggroup ()
: hggroup (hax)
: hggroup (…, property, value, …)
: h = hggroup (…)
軸の親haxを使用してハンドル グラフィックス グループ オブジェクトを作成します。
親が指定されていない場合は、現在の軸にグループが作成されます。
hggroup には複数のプロパティ/値のペアを指定できますが、ペアで指定する必要があります。プロパティの完全なリストは、 Axes Propertiesに記載されています。
オプションの戻り値hは、作成された hggroup オブジェクトへのグラフィックス ハンドルです。
プログラミング ノート: hggroup は、線オブジェクトやパッチ オブジェクトなどの基本グラフィック オブジェクトを、適切に反応できる単一のユニットにグループ化する方法です。たとえば、等高線プロットの個々の線は単一の hggroup に集められ、単一のコマンドで表示/非表示を切り替えることができますset (hg_handle, "visible", "off")。
See also: addproperty, addlistener.
例えば、aの単純な使用法はhggroup次のようになります。
x = 0:0.1:10; hg = hggroup (); plot (x, sin (x), "color", [1, 0, 0], "parent", hg); hold on plot (x, cos (x), "color", [0, 1, 0], "parent", hg); set (hg, "visible", "off");
2 つのプロットを 1 つのオブジェクトにグループ化し、それらの表示を直接制御します。 のデフォルトのプロパティは、hggroup他のグラフィックス オブジェクトの共通プロパティ セットと同じです。addproperty関数を使用して追加のプロパティを追加できます 。
: addproperty (name, h, type)
: addproperty (name, h, type, arg, …)
グラフィックス オブジェクトhにnameという名前の新しいプロパティを作成します。
type は作成するプロパティのタイプを決定します。args に は通常、プロパティのデフォルト値が含まれますが、プロパティのタイプに応じて追加の引数が指定される場合があります。
サポートされているプロパティ タイプは次のとおりです。
string
文字列プロパティ。arg にはデフォルトの文字列値が含まれます。
any
型指定のないプロパティ。この種類のプロパティは任意のオクターブ値を保持できます。args にはデフォルト値が含まれます。
radio
受け入れられる値が限定された文字列プロパティ。最初の引数は、受け入れられるすべての値が縦棒 ('|') で区切られた文字列である必要があります。デフォルト値は、'{' '}' のペアで囲むことでマークできます。デフォルト値は、オプションの 2 番目の文字列引数として指定することもできます。
boolean
ブール型プロパティ。このプロパティ タイプは、受け入れられる値として "on|off" を持つラジオ プロパティと同等です。arg には、デフォルトのプロパティ値が含まれます。
double
スカラー double プロパティ。arg にはデフォルト値が含まれます。
handle
ハンドル プロパティ。この種類のプロパティは、グラフィックス オブジェクトのハンドルを保持します。arg には、デフォルトのハンドル値が含まれます。デフォルト値が指定されていない場合、プロパティは空のマトリックスに初期化されます。
data
データ (行列) プロパティ。arg にはデフォルトのデータ値が含まれます。デフォルト値が指定されていない場合、データは空の行列に初期化されます。
color
色プロパティ。arg にはデフォルトの色値が含まれます。デフォルトの色が指定されていない場合、プロパティは黒に設定されます。オプションの 2 番目の文字列引数を指定して、受け入れられる文字列値の追加セット (ラジオ プロパティなど) を指定することもできます。
type は、コア オブジェクト タイプとそのオブジェクト タイプの有効なプロパティ名を連結したものにすることもできます。作成されたプロパティは、参照されたプロパティと同じ特性 (タイプ、可能な値、非表示の状態など) を持ちます。これにより、既存のプロパティをグラフィックス オブジェクトhに複製できます。
例:
addproperty ("my_property", gcf, "string", "a string value");
addproperty ("my_radio", gcf, "radio", "val_1|val_2|{val_3}");
addproperty ("my_style", gcf, "linelinestyle", "--");
See also: addlistener, hggroup.
にプロパティを追加するとhggroup、そのプロパティはグループの子や他のグラフィック オブジェクトのどのプロパティにもリンクされなくなります。新しく追加されたプロパティの使用方法を制御するには、 関数を使用して、addlistenerプロパティが変更されたときに実行されるコールバック関数を定義します。
: addlistener (h, prop, fcn)
グラフィックス オブジェクトhのプロパティpropのリスナーとしてfcnを登録します。
プロパティが設定されると、プロパティ リスナーが (登録順に) 実行されます。リスナーが実行されると、新しい値がすでに使用可能になります。
prop は、 h内の有効なプロパティを指定する文字列である必要があります。
fcn は、関数ハンドル、文字列、または最初の要素が関数ハンドルであるセル配列にすることができます。fcnが関数ハンドルの場合、対応する関数は少なくとも 2 つの引数を受け入れる必要があり、それぞれオブジェクト ハンドルと空のマトリックスに設定されます。fcn が文字列の場合、 有効なオクターブ式である必要があります。fcn がセル配列の場合、最初の要素は、上記と同じシグネチャを持つ関数ハンドルである必要があります。セル配列の次の要素は、関数への追加引数として渡されます。
例:
function my_listener (h, dummy, p1)
fprintf ("my_listener called with p1=%s\n", p1);
endfunction
addlistener (gcf, "position", {@my_listener, "my string"})
See also: dellistener, addproperty, hggroup.
: dellistener (h, prop, fcn)
グラフィックス オブジェクトhのプロパティ propのリスナーとしてのfcnの登録を削除します。
関数fcn は、元の呼び出しに渡されたものと同じ変数 (同じ値だけではなく) である必要がありますaddlistener。
fcnが定義されていない場合は、 propのすべてのリスナー関数 が削除されます。
例:
function my_listener (h, dummy, p1)
fprintf ("my_listener called with p1=%s\n", p1);
endfunction
c = {@my_listener, "my string"};
addlistener (gcf, "position", c);
dellistener (gcf, "position", c);
See also: addlistener.
これら2つの関数の使用例は次のようになります。
x = 0:0.1:10;
hg = hggroup ();
h = plot (x, sin (x), "color", [1, 0, 0], "parent", hg);
addproperty ("linestyle", hg, "linelinestyle", get (h, "linestyle"));
addlistener (hg, "linestyle", @update_props);
hold on
plot (x, cos (x), "color", [0, 1, 0], "parent", hg);
function update_props (h, d) set (get (h, "children"), "linestyle", get (h, "linestyle")); endfunction
linestyleにプロパティを追加しhggroup、その値の変更をグループの子に伝播する関数。この linkprop関数を使用すると、上記の処理を次のように簡略化できます。
x = 0:0.1:10;
hg = hggroup ();
h1 = plot (x, sin (x), "color", [1, 0, 0], "parent", hg);
addproperty ("linestyle", hg, "linelinestyle", get (h, "linestyle"));
hold on
h2 = plot (x, cos (x), "color", [0, 1, 0], "parent", hg);
hlink = linkprop ([hg, h1, h2], "color");
: hlink = linkprop (h, "prop")
: hlink = linkprop (h, {"prop1", "prop2", …})
グラフィック オブジェクトのプロパティをリンクして、1 つのプロパティの変更が他のプロパティにも反映されるようにします。
入力hはリンクするグラフィック ハンドルのベクトルです。
prop は、単一のプロパティをリンクする場合は文字列、複数のプロパティの場合は文字列のセル配列になります。リンク処理中、prop内のすべてのプロパティは、リストhの最初のオブジェクトに存在する値に最初に設定されます。
この関数は、リンクを記述する特別なオブジェクトであるhlinkを返します。参照hlinkが存在する限り、グラフィック オブジェクト間のリンクはアクティブになります。つまり、hlink はsetappdataワークスペース変数、グローバル変数に保存するか、またはやなどの関数を使用して保存する必要がありますguidata。プロパティのリンクを解除するには、 を実行します。 clear hlink
の使用例linkpropは
x = 0:0.1:10;
subplot (1,2,1);
h1 = plot (x, sin (x));
subplot (1,2,2);
h2 = plot (x, cos (x));
hlink = linkprop ([h1, h2], {"color","linestyle"});
set (h1, "color", "green");
set (h2, "linestyle", "--");
See also: linkaxes, addlistener.
: linkaxes (hax)
: linkaxes (hax, optstr)
2D プロットの軸の制限をリンクして、1 つの軸の変更が他の軸にも伝播されるようにします。
リンクされる軸ハンドルは、最初の引数haxとして渡されます。
オプションの 2 番目の引数は、どの軸の制限がリンクされるかを定義する文字列です。optstr に指定できる値は次のとおりです。
"x"
X軸をリンク
"y"
Y軸をリンクする
"xy" (default)
両方の軸をリンクする
"off"
リンクをオフにする
指定しない場合は、デフォルトで X 軸と Y 軸の両方がリンクされます。
リンクすると、 haxの最初の軸の制限がリスト内の他の軸に適用されます。いずれかの軸に対するその後の変更は、他の軸にも伝播されます。
See also: linkprop, addproperty.
これらの機能は、いくつかの基本的なグラフィック オブジェクトで使用されます。Octavehggroupの関数によって作成されたオブジェクトには、1 つ以上のグラフィック オブジェクトが含まれており、次の目的で使用されます。
複数のグラフィックオブジェクトをグループ化し、
異なるグラフィックオブジェクト間でリンクされたプロパティを作成し、
オブジェクトの実際のデータから名目上のユーザー データを非表示にします。
たとえば、この関数は、各ステム シリーズにステムの本体とヘッドを表す 2 つの線オブジェクトが含まれるstemステム シリーズを作成します 。ステム シリーズののプロパティは ステムのヘッドを表し、ステムの本体はベースラインとこの値の間にあります。たとえば、 hggroupydatahggroup
h = stem (1:4) get (h, "xdata") ⇒ [ 1 2 3 4]' get (get (h, "children")(1), "xdata") ⇒ [ 1 1 NaN 2 2 NaN 3 3 NaN 4 4 NaN]'
ステム シリーズ オブジェクトの とその基になる線と xdataの差を表示します。hggroup
このようなグループ オブジェクトの基本的なプロパティは、1 つ以上のリンクされた で構成されhggroup、これらのグループの特定のプロパティの変更がグループの他のメンバーに伝播されることです。一方、グループのメンバーの特定のプロパティは現在のメンバーにのみ適用されます。
さらに、グループのメンバーは、コールバック関数を通じて他のグラフィック オブジェクトにリンクすることもできます。たとえば、または関数のベースラインはbar線stemオブジェクトであり、対応する hggroup 要素の変更に基づいて、その長さと位置が自動的に調整されます。
Data Sources in Object Groups
Area Series
Bar Series
Contour Groups
Error Bar Series
Line Series
Quiver Group
Stair Group
Stem Series
Surface Group