既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法JSL を使用して既存のグラフ ビルダー ウィンドウのフレーム サイズを設定する方法はありますか?
たとえば、グラフ ビルダー ウィンドウが開いており、そのウィンドウ内のグラフの全体のフレーム サイズを 800x600 に設定する JSL ファイルを実行したいとします。 JSL スクリプトに GB オブジェクトへの参照がなくてもそれは可能ですか?
自動化とスクリプト作成Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法グラフ ビルダーへの参照を取得できれば最も簡単です。 たとえば、アウトライン ボックスへの参照を取得した後、<< Get Scriptable Object を使用できます。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
gb = (nw[OutlineBox("Graph Builder")] << Get Scriptable Object);
fb = Report(gb)[FrameBox(1)];
fb << Frame Size(800,200);
または、場合によっては、ウィンドウからフレームボックスを直接見つけることができる場合もあります。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
nw[FrameBox(1)] << Frame Size(800,200);
そして最後にXPath
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("",
Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
);
(nw << XPath("//FrameBox")) << Frame Size(800,200);
Current Window() を使用してウィンドウへの参照を取得できますが、スクリプト ウィンドウから使用するのは少し面倒で、ツールバー/ショートカット/アドインから使用する方がはるかに優れています。
Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法ここでは別のアプローチを紹介します。 現在のすべてのウィンドウのリストを取得できます。 これらは外観順に並べられているため、グラフ ビルダーを開いたばかりの場合は、それが最後の項目になります。 それ以外の場合は、ウィンドウのリストを調べて必要な GB を見つけることができます。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :height ), Y( :weight ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
win = Get Window List();
frame = (win[N Items(win)] << XPath( "//FrameBox" ))[1];
frame << Select << Frame Size( 800, 600 );
スクリプトは、メニューまたはツールバー項目として追加することも、アドインにすることもできます。
Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法この答えは気に入っていますが、「dt =...」行と「obj = ...」行を取り出して「//!」を入れるとエラーが発生します。上部の をクリックしてダブルクリックします。エラーは次のとおりです。
Subscript Range in access or evaluation of '(win[N Items(win)] << XPath("//FrameBox"))[ /*###*/1]' , (win[N Items( win )] << XPath( "//FrameBox" ))[/*###*/1]Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法ために@Mark_Baileyのスクリプトが書かれたとおりに機能するには、グラフボックスが最後に開いているウィンドウである必要がありますが、別のスクリプトから起動する場合はそうではないと推測しています。このように変更して、グラフ ビルダー ウィンドウのみを選択することもできます。少なくとも 1 つのウィンドウが開いていることを確認する必要があります。
Names Default to Here( 1 );
//Find graph builder windows
graphs = filter each({w}, win,
if(
length(w << XPath("//OwnerBox[@helpKey='Graph Builder']")) > 0 ,
1,
0
)
);
//Choose the last one
frame = (graphs[N Items(graphs)] << XPath( "//FrameBox" ))[1];
//Modify the frame
frame << Select << Frame Size( 800, 600 );
このアドインで 3D プロット ウィンドウを探すときに、これと同様のことを行うことに注意してください。 3D プロットツールそこで、どのウィンドウを変更するかをユーザーに選択させます。コードはオンですGitHub 。
Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法素晴らしい。
「ウィンドウに合わせる」が「オフ」になっていない場合、これらのフレーム サイズが常に機能するとは限らないことに注意してください。このコードを「ウィンドウに合わせる」設定も変更できるように30分間試みましたが、うまくいきませんでした。それを行う方法はありますか?
そして、興味深いことに、グラフ ビルダー ウィンドウに複数のプロットがある場合 (たとえば、ラップ フィールドに変数がある場合)、フレーム サイズはプロット領域全体ではなく個々のプロット フレームを変更します。個々のプロットではなく、プロット領域全体を特定のサイズに変更することはできますか?
最後に、このようなコードをどこで学びましたか?Python コーダー歴 10 年 (および Perl コーダー歴 20 年) として、JSL を理解するのはかなり難しいと言えます。これらの項目 (XPath、Select...) に関するスクリプト索引を読んだ後でも、 ここでの意味がまだわかりません...
ありがとう!
Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法ここで推測するだけですが... Fit to Window はフレーム ボックスではなくグラフ ビルダーに送信する必要があります (<< Get Scriptable Object がここで役立つかもしれません)。 Wrap を使用する場合 (または Group X)、グループの数に基づいてサイズを計算する必要があるかもしれません。 それとも、グラフビルダーウィンドウのサイズを操作できるでしょうか?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:Sex), Y(:Height), Group X(:Age)),
Elements(Box Plot(X, Y))
);
wait(0);
win = Get Window List();
//Find graph builder windows
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
last_gb << Fit to Window("On");
last_gb << Size(800,600); // instead of manipulating framebox
//frame = Report(last_gb)[FrameBox(1)];
//frame << Frame Size(800, 600);
XPath は JMP のものではありませんXPath - ウィキペディアですが、レポート内のさまざまなオブジェクトにアクセスする簡単な方法です。 << Get XML を使用すると、XPathing が何であるかを確認するのに役立ちます
Report(gb) << Get Xml;
Re: 既存のグラフ ビルダー ウィンドウのフレーム サイズをスクリプト化する方法それはできました!ジャーモさん、そして反応してくれた皆さん、ありがとう!!