GraphBox内ではif/Loopは機能しませんJMPユーザーの皆様へ、これは私が現在作成中のスクリプトで直面している問題を簡略化したものです。
グラフボックスの作成処理を関数(ここでは「 テスト 」)の中に記述することで、後でこの処理を簡単にループできるようにしたいと考えています。
しかし、このコードスニペットは、「 もし 」内の変数( showHorLines 、 参照行数 )が正しく評価されていない(あるいは全く評価されていない)ため、動作しません。関数の引数で使用している他の変数( 幅 、 身長 )は意図どおりに動作しているにもかかわらず、この問題が発生しているため、Graph Box 内の「 もし 」に問題があるという結論に至りました。
Clear Globals();
Names Default To Here( 1 );
Test = Function({width, height, showHorLines, numReferenceLines}, {Default Local},
gb = GraphBox(
FrameSize(width, height),
XScale(0, width),
YScale(0, height),
XName("split"),
YName("color"),
//[] Generate grey horizontal lines
If(showHorLines == 1,
PenColor(65);
For(h = 0, h <= numReferenceLines, h++,
HLine(h*height/numReferenceLines)
);
PenColor(0),
);
);
win = NewWindow("new window", gb);
);
Test(200, 200, 1, 10);
グラフボックスを別のオブジェクトに変更することなく、この問題を解決する方法はありますか?
可能であれば、これが関数として残っていれば幸いです。というのも、以前、Eval、EvalExpr、Expr を使って同様のアプローチを試みたのですが、うまくいかず、同じような結果になったからです。
よろしくお願いします
自動化とスクリプト作成基本的なデータ分析とモデリングデータ探索と可視化Re: GraphBox内でif/Loopが機能しないEval(Eval Expr()) を使うことをお勧めします。私の場合はこれでうまくいきました。
Names Default To Here( 1 );
Test = Function( {width, height, showHorLines, numReferenceLines},
{Default Local},
Eval(
Eval Expr(
gb = Graph Box(
FrameSize( Expr( width ), Expr( height ) ),
X Scale( 0, Expr( width ) ),
Y Scale( 0, Expr( height ) ),
XName( "split" ),
YName( "color" ),
If( Expr( showHorLines ) == 1,
Pen Color( 65 );
For( h = 0, h <= Expr( numReferenceLines ), h++,
H Line( h * Expr( height ) / Expr( numReferenceLines ) )
);
Pen Color( 0 );
,
)
);
win = New Window( "new window", gb );
)
)
);
Test( 200, 200, 1, 10 );
Re: GraphBox内でif/Loopが機能しない@nozellot簡単な説明:グラフボックスは、関数 Test が終了した後も長期間存在し続けます。Test のパラメータは、Test が終了すると消滅します。グラフボックスにアタッチされたスクリプトは、後でこれらのパラメータを見つけることができません。
@mmarchandFSLRは、パラメータをその値に変換するために私が推奨するソリューションを使用しています。
Expr( showHorLines )
そしてそれを包む
Eval Expr( ... )
これはすべての式を評価し、評価された答えを残し、次にそれを使用します
Eval( ... )
変数ではなく定数を含む式でGraphBox()関数を実行すると、利用できなくなったパラメータに依存しないグラフボックスが得られます。