グラフボックス内に複数のインタラクティブハンドルを作成するこんにちは、
X座標とY座標を定義する2つの列を持つテーブルから、テーブルに定義されている各点に対してインタラクティブなハンドルを持つグラフボックスを作成しようとしています。 ハンドルを1つずつ追加すること(下記のnw1を参照)は完全に機能しますが、ForEachRowまたはForループ(nw2とnw3を参照)を使用してプロセスを自動化しようとすると、グラフボックスが表示されます。対話的に移動しました。 ハンドルの作成を自動化するための正しい方法は何でしょうか。
ありがとう、Étienne
dt = NewTable ( 「データポイント」 、AddRows( 3 、
NewColumn ( "xVar" 、数値、 「連続」 、SetValues([ 1 、 2 、 3 ])、
NewColumn ( "yVar" 、数値、 「連続」 、SetValues([ 1 、 2 、 3 ]))
;
CurrentDataTable (dt);
nw1 = 新しい窓 ( 「例1」 、
gr1 = GraphBox (
フレームサイズ( 400 、 400 、 Xスケール ( 0 、 5 、 Yスケール ( 0 、 5 、
ハンドル (:xVar [ 1 ]、:yVar [ 1 ]、:xVar [ 1 ] = x; :yVar [ 1 ] = y;);
ハンドル (:xVar [ 2 ]、:yVar [ 2 ]、:xVar [ 2 ] = x; :yVar [ 2 ] = y;);
ハンドル (:xVar [ 3 ]、:yVar [ 3 ]、:xVar [ 3 ] = x; :yVar [ 3 ] = y;);
;
;
nw2 = 新しい窓 ( 「例2」 、
gr2 = GraphBox (
フレームサイズ( 400 、 400 、 Xスケール ( 0 、 5 、 Yスケール ( 0 、 5 、
ForEachRow (
ハンドル (:xVar、:yVar、:xVar = x;:yVar = y;);
;
;
;
nw3 = 新しい窓 ( 「例3」 、
gr3 = GraphBox (
フレームサイズ( 400 、 400 、 Xスケール ( 0 、 5 、 Yスケール ( 0 、 5 、
にとって (i = 1 、i <= NRows (dt)、i ++、
ハンドル (:xVar [i]、:yVar [i]、:xVar [i] = x;:yVar [i] = y;);
;
;
;
グラフボックスに複数のインタラクティブハンドルを作成するありがとう @cwillden 。 あなたの解決策は完璧に機能し、それはスケーラブルです。 それは私がここでやろうとしていた、すなわちforループを書き出してからそれを実行しようとしていたものであるSASマクロコードを私に思い出させます。
グラフボックスに複数のインタラクティブハンドルを作成するこんにちは @rassart 、
この1つのケースでは、ハンドルを追加するときにテーブルから行の値をハードコーディングする必要があります。 作成したばかりのグラフィックススクリプトをウィンドウからグラフボックスから取り出すと、その理由が明らかになります。 たとえば、例3のグラフィックススクリプトは、次のようになります。
gr3 << Get Graphics Script;
/*:
{For( i = 1, i <= N Rows( dt ), i++,
Handle(
:xVar[i],
:yVar[i],
:xVar[i] = x;
:yVar[i] = y;
)
)}この例では、変数 'i'の最終値は4に設定されます。したがって、'i'の値はハードコーディングされていないので、ハンドルはどれも正しく機能しません。 ハードコーディングがなければ、グラフィックススクリプトは常に現在の 'i'の値に依存します。
forループを使用してこれらの値をハードコーディングする方法は次のとおりです。
nw4 = New Window( "Example 4", gr4 = Graph Box( FrameSize( 400, 400 ), X Scale( 0, 5 ), Y Scale( 0, 5 ), ) );
For( i = 1, i <= N Rows( dt ), i++,
Eval( Parse( Eval Insert( "gr4[framebox(1)] << Add Graphics Script(Handle(:xVar[^i^], :yVar[^i^], :xVar[^i^] = x; :yVar[^i^] = y;));" ) ) )
);
グラフボックスに複数のインタラクティブハンドルを作成するどうやらHandle()関数は実行時に解析を処理することができません。 次のスクリプトはそれを補正します
Current Data Table( dt );
nw1 = New Window( "Example 1",
gr1 = Graph Box(
FrameSize( 400, 400 ),
X Scale( 0, 5 ),
Y Scale( 0, 5 ),
Handle(
:xVar[1],
:yVar[1],
:xVar[1] = x;
:yVar[1] = y;
);
Handle(
:xVar[2],
:yVar[2],
:xVar[2] = x;
:yVar[2] = y;
);
Handle(
:xVar[3],
:yVar[3],
:xVar[3] = x;
:yVar[3] = y;
);
)
);