名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか。複数の GB プロット上の独立したハンドル。全て、
この問題は理解できません。
GBプロットにハンドルを付けたいのですが、1つのウィンドウに複数のGBプロットがあります。ハンドルスクリプト内の変数が相互に干渉してしまいます。各スクリプトで新しい変数を使用するか、グラフィックススクリプトごとに新しい名前空間を作成する必要があります(後者の方が良いようです)。しかし、名前空間を作成するとすぐに参照変数で参照してしまうため、新しい名前空間を作成するたびに上書きされてしまいます。
以下の例では、異なる変数名を使用していますが、動的に作成し、適切にアドレス指定する必要があります。
次のようなトリックがあったのを覚えています:
ns = Namespace( Expr( ns << Get Name ) )
しかし、このケースに適用できるかどうかはわかりませんし、率直に言って、現在使用している場所でそれがどのように、なぜ機能するのか理解できていません。
以下にスクリプトの例を示します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
lub = Lineup Box( N Col( 2 ) );
ns1 = New Namespace(
"height"
);
ns1:_x_location_ = 2;
ns1:_y_location_ = 50;
lub << Append(Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
ns1:_x_location_,
ns1:_y_location_,
ns1:_x_location_ = x;
ns1:_y_location_ = y;
)
)}
)
)
);
);
ns2 = New Namespace(
"weight"
);
ns2:_x_location_ = 2;
ns2:_y_location_ = 50;
lub << Append(Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
ns2:_x_location_,
ns2:_y_location_,
ns2:_x_location_ = x;
ns2:_y_location_ = y;
)
)}
)
)
);
);
win = New Window( "Independent Handles Example",lub);
自動化とスクリプトRe: 名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか? 複数の GB プロット上の独立したハンドル。この場合は名前空間を省略してコンテキストボックスを利用できると思います。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
lub = Lineup Box(N Col(2));
lub << Append(
cb1 = Context Box(
box:_x_location_ = 2;
box:_y_location_ = 50;,
Graph Builder(
Size(528, 450),
Show Control Panel(0),
Variables(X(:age), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(6))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox,
{Add Graphics Script(
2,
Description(""),
Handle(
box:_x_location_,
box:_y_location_,
box:_x_location_ = x;
box:_y_location_ = y;
)
)}
)
)
)
)
);
lub << Append(
cb2 = Context Box(
box:_x_location_ = 2;
box:_y_location_ = 50;,
Graph Builder(
Size(528, 450),
Show Control Panel(0),
Variables(X(:age), Y(:weight), Overlay(:sex)),
Elements(Points(X, Y, Legend(6))),
SendToReport(
Dispatch({}, "Graph Builder", FrameBox,
{Add Graphics Script(
2,
Description(""),
Handle(
box:_x_location_,
box:_y_location_,
box:_x_location_ = x;
box:_y_location_ = y;
)
)}
)
)
)
)
);
win = New Window("Independent Handles Example", lub);
Re: 名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか? 複数の GB プロット上の独立したハンドル。では、これらの GB を動的に作成して Line Up Box に追加する場合、この Context Box は、{Default Local} が関数内で行うのと同じように、内部で変数を分離する必要がありますか? 試してみます。
Re: 名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか? 複数の GB プロット上の独立したハンドル。いいえ、うまくいきません。ハンドルは独立して動作しません。プロット1のハンドルを動かすと、プロット2のハンドルをクリックするとすぐに、プロット1のハンドルの位置に移動します。
スクリプトは次のとおりです。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
lub = Lineup Box( N Col( 2 ) );
lub << Append(
Context Box(
_x_location_ = 2;
_y_location_ = 50;
Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :height ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
_x_location_,
_y_location_,
_x_location_ = x;
_y_location_ = y;
)
)}
)
)
);
)
);
lub << Append(
Context Box(
_x_location_ = 2;
_y_location_ = 50;
Graph Builder(
Size( 528, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 6 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
2,
Description( "" ),
Handle(
_x_location_,
_y_location_,
_x_location_ = x;
_y_location_ = y;
)
)}
)
)
);
)
);
win = New Window( "Independent Handles Example", lub );
Re: 名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか? 複数の GB プロット上の独立したハンドル。私たちのスクリプトを比較すると、違いがはっきりとわかるでしょう (コンテキスト ボックスがあるだけでは十分ではなく、それを活用する必要があります)。
Re: 名前空間を動的に作成してアドレス指定するにはどうすればよいでしょうか? 複数の GB プロット上の独立したハンドル。あっ、ごめんなさい…:)私のせいです:)
正しく書けば、ちゃんと動きます。ありがとうございます!