マルチカラムスイッチャー複数の列スイッチャーを実行するときに同じ列が選択されないようにする方法はありますか?
dt = open("$SAMPLE_DATA/Candy Bars.jmp");
biv = dt << Bivariate(
Y( :Saturated fat g ),
X( :Sugars g ),
SendToReport( Dispatch( {}, "Bivar Plot", FrameBox, {Frame Size( 593, 564 )} ) )
);
cs1 = biv << Column Switcher(
:Saturated fat g,
{:Name( "Serving/pkg" ), :Calories, :Total fat g, :Saturated fat g,
:Cholesterol g, :Sodium mg, :Carbohydrate g, :Dietary fiber g, :Sugars g,
:Protein g, :Vitamin A %RDI, :Vitamin C %RDI, :Calcium %RDI, :Iron %RDI}
);
cs2 = biv << Column Switcher(
:Sugars g,
{:Name( "Oz/pkg" ), :Calories, :Total fat g, :Saturated fat g,
:Cholesterol g, :Sodium mg, :Carbohydrate g, :Dietary fiber g, :Sugars g,
:Protein g, :Vitamin A %RDI, :Iron %RDI}
);
cs1 << Run;
cs2 << Run;
これを長時間実行すると、最終的に cs2 が cs1 に追いつき、エラーがスローされます。列が同じになったため、cs1 と cs2 は X/Y 依存関係を失い、両方のパラメーターを変更します。したがって、X=Y は常に true になります。
回避策を知っている人はいますか?
Re: 複数の列スイッチャーここにボタンがあります。これは、Schedule() を使用してアニメーションを実行し、setIcon() を使用してグラフィックを取得します。Write() ステートメントは、変数を変更するロジックに置き換える必要があります。OnClose は、表示ウィンドウが閉じられたときにスケジューラ ウィンドウを閉じるように表示ウィンドウを設定します。

stop = 0; // animating state
loopFun = Function( {},
If( !stop,
Write( "go again\!n" ); // logic for animation
Schedule( .5, loopFun() ); // continue the animation 1/2 second later
)
);
New Window( "buttons",
<<ONCLOSE></ONCLOSE>
Re: 複数の列スイッチャー実際には、Col List Box 機能を使用して書式設定を機能させることができました。ただし、時間をかけてカスタムの再生ボタンと停止ボタンを作成しようとした人がいるとしたら、本当に感謝します。
これは、カスタム スイッチャー用に私がすぐに作成したコードです。ここで、xcolumns と ycolumns は切り替えに必要な列のリストであり、dt はデータ テーブルです。
xnlines = If(nitems(xcolumns) > 15, 15, nitems(xcolumns));
ynlines = If(nitems(ycolumns) > 15, 15, nitems(ycolumns));
vlb << Append(hlb = Hlistbox(VlistBox(
Text Box("Column X"),
columnswitcherX = Col List Box(width(250), maxSelected(1), nlines(xnlines)),
Text Box("Column Y"),
columnswitcherY = Col List Box(width(250), maxSelected(1), nlines(ynlines)))));
columnswitcherX << Append(xcolumns);
columnswitcherY << Append(ycolumns);
columnswitcherX << Set Selected(1);
columnswitcherX << Set Script(
bivcolx = columnswitcherX << get selected;
bivcoly = columnswitcherY << get selected;
try(interactivebiv << Delete Box);
hlb << Append(interactivebiv = dt << Bivariate( X( Column(dtinteractive, bivcolx) ), Y( Column(dtinteractive, bivcoly) ), Fit Line( {Line Color( {213, 72, 87} )} )) )
);
columnswitcherY << Set Script(
bivcolx = columnswitcherX << get selected;
bivcoly = columnswitcherY << get selected;
try(interactivebiv << Delete Box);
hlb << Append(interactivebiv = dt << Bivariate( X( Column(dtinteractive, bivcolx) ), Y( Column(dtinteractive, bivcoly) ), Fit Line( {Line Color( {213, 72, 87} )} )) )
);
columnswitcherY << Set Selected(1);
Re: 複数の列スイッチャー<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />それで、これを実行しましたが、列名がかなり長いため、リストボックスで列名を正しく書式設定することができません。列スイッチャーと同じように表示させる方法をご存知ですか?(前半....後半)?
Re: 複数の列スイッチャーこれは、列スイッチャーの厄介な制限です。回避策は、列スイッチャーを使用せず、リスト ボックス (またはコンボ ボックス) を使用して機能を自分で実装することです。これらのリスト ボックスに、二変量プロットを削除し、リスト ボックスの選択に基づいて新しいプロットを追加作成するスクリプトを添付します。