1

Matlabでシンプルなインタラクティブプロッターの作成に取り組んでいます。私がしていることは単純です:私はコマンドを使用します:

[x,y] = ginput(1)

場所(x、y)を正確に特定します。次に、このポイントをシードポイントとして使用して曲線をプロットし、プロットされた曲線の上部にいくつかの矢印(方向を示す)を追加します。

ここで私の質問は次のとおりです。図が完成したら、1回のクリックで単一の曲線とそれに対応する矢印を選択(たとえば削除)できるようにしたいと思います。

問題は、これらの矢印と曲線が同じオブジェクトの一部ではないことです。そのため、Matlabは、最初に、どちらが選択されたかに応じて、曲線または矢印のみを削除します。

絞り込んでみると、曲線と矢印には別々のオブジェクトハンドラーがあることがわかります。私の質問を言い換えると、とにかく、これら2つの別々のハンドラーをグループ化するか、たとえば、矢印を元の曲線の子にすることができますか?

4

2 に答える 2

2

プロパティを使用してtag、プロット内の要素をグループ化できます。たとえば、

hold on;    
plot(x, y, 'tag', 'group1');
plot(x2, y2, 'tag', 'group1');

plot(x3, y3, 'tag', 'group2');
plot(x4, y4, 'tag', 'group2');

その後、最初のグループに属するすべての要素を次の方法で選択できます。

h = findall(0, 'tag', 'group1');

によってそれらを削除します

delete(h); 

コメントでOPから要求されたように、データポイントのインタラクティブなグループごとの削除を可能にするソリューションは次のとおりです。

   plot(x, y, 'tag', 'group1', 'buttondownfcn', @(obj, evt) delete(findall(gca, 'tag', 'group1')))
   plot(x2, y2, 'tag', 'group2', 'buttondownfcn', @(obj, evt) delete(findall(gca, 'tag', 'group2')))

ここで1つのデータポイントをクリックすると、同じグループに属するすべてのポイントが削除されます。

于 2012-05-22T10:20:30.520 に答える
1

さて、あなたはさまざまな方法でこの問題に取り組むことができます。

まず、情報の保存について:

  • 最もクリーンなのはclassdef、オブジェクトを保持するために独自のクラスを作成する場合ですhandles。そのような目的のために拡張できるクラスがあります。userdataまたは、すべてのグラフィックオブジェクトのフィールドに保存することもできます。

  • ButtonDownFcn選択と削除について-行はaと。に関連付けることができますDeleteFcn。1つ目は関連する行を強調表示するために使用でき、2つ目は関連する行を削除するために使用できます。

于 2012-05-22T09:34:10.167 に答える