グラフの軸とタイトルを変数として設定する皆さんこんにちは、ここの初心者です:
私は何度も繰り返すことが予想されるプロセスで一連のデータを扱っているため、できる限りセットアップを自動化しようとしています。 現時点では、データのプレゼンテーションに取り組んでいますが、セルの内容に応じてグラフの軸のタイトルを可変にするのにあなたの助けが必要です。
例として、以下のデータがあります。

このデータから、各「Col A」値の「Res」を示すグラフと、「Ref」(およびその境界条件「+/-uref」と「rob」およびその境界条件を示す一連の参照線)をプロットしたいと考えています。境界条件「+/- urob」。
現在のスクリプトは次のとおりです。
dt = Current Data Table();
Graph Builder(
Size( 743, 472 ),
Show Control Panel( 0 ),
Variables(
X( :COLA, Order By( :Res, Ascending, Order Statistic( "Mean" ) ) ),
Y( :Res ),
Interval( :Ures )
),
Elements( Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch(
{},
"COLA",
ScaleBox,
{Label Row(
{Label Orientation( "Vertical" ), Set Font Size( 12 ),
Set Font Style( "Italique" )}
)}
),
Dispatch(
{},
"Res",
ScaleBox,
{Min(), Max(), Inc(), Minor Ticks( 1 ),
Add Ref Line( dt[1, 11], "Solid", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 9], "Dotted", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 10], "Dotted", "Dark Blue", "", 1 ),
Add Ref Line( dt[1, 4], "Solid", "Dark Red", "", 1 ),
Add Ref Line( {dt[1, 7], dt[1, 8]}, "Solid", "Medium Dark Red", "", 1, 0.15 ),
Add Ref Line( dt[1, 7], "Dotted", "Dark Red", "", 1 ),
Add Ref Line( dt[1, 8], "Dotted", "Dark Red", "", 1 )}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "Analyte res" )} ),
Dispatch( {}, "X title", TextEditBox, {Set Text( "COLA" )} ),
Dispatch( {}, "Y title", TextEditBox, {Set Text( "Units of Res (g/m3)" )} ),
Dispatch( {}, "400", LegendBox, {Legend Position( {7, [-1, -3]} )} )
)
);
これは正常に機能し、必要に応じてセル値に従ってグラフ内の参照線を変更できるほど柔軟です。
さて、私が望んでいるのは、タイトルでも基準線と同じことができるようにすることです。 したがって、理想的には、jmpテーブルに最初の列を追加できます。これを「情報」と呼びます。これには、調査対象の分析物に関する情報(名前、測定に使用される単位など)が含まれており、グラフのタイトルが必要です。 (および軸)これらのセルから情報を引き出し(参照線が現在行っているように)、この情報をテキスト内で使用します。
たとえば、「情報」列に「Zr4+」がある場合、最終グラフでこのセルを探し、それを使用してセル自体またはその軸の 1 つにラベルを付けたいと思います。その後、セルを次のように変更できます。 「Br7-」。次にスクリプトを実行すると、新しいグラフには「Br7-」というラベルが付けられます。
これは可能でしょうか?
変数を長いテキストに挿入できる場合、ボーナスポイント。たとえば、y 軸が「Zr 4+ (mg/l)」で、その後「Br7- (mg/l)」に変化します。
マスカスタマイゼーションウィンドウズRe: グラフの軸とタイトルを変数として設定するこれありがとう、
あなたの言う通りにしてガイドを読んでみます。 実際、JSL を使った仕事は人生で初めて実際にスクリプト/コーディングを行ったものなので、まだ学ばなければならない具体的なロジックがたくさんあります。
Re: グラフの軸とタイトルを変数として設定するあなたが抱えているように見える問題は、適切に構文化された要素を TextEditBox() に提供する方法です。
Scripting Index にある Set Text の仕様は次のとおりです。

基本的に、提供する必要があるのは「文字列」です。JSL では、ほとんどすべてのものを文字列に入れることができます。サンプルスクリプトの例より
gbr[TextEditBox(1)] << set text(column(dt,"info")[1]);
「info」列の最初の行の値が TextEditBox() に送信され、「Indo」列のモデリング タイプが文字であるため、各セルの値は「文字列」になります。
JSL では、さまざまな方法で文字列を構築できます。時間をかけてスクリプト ガイドを読むことを強くお勧めします。スクリプト ガイドは、[ヘルプ] プルダウン メニューから利用できる JMP ドキュメント ライブラリにあります。
ただし、簡単に説明すると、「グラフ 5 の分析結果」が必要な場合は、単純に次のように記述できます。
gbr[TextEditBox(1)] << set text( "Graph 5 " || column(dt,"info")[1]);
TextEdibox() に渡される文字列は、文字列「Graph 5」と列 Info の最初の行のセルの文字列を連結して作成された文字列です。
Re: グラフの軸とタイトルを変数として設定するこんにちは、ジムさん
スクリプトと軸のタイトルをもう少しいじってみました。
あなたが提供したソリューションは基本的なものにはうまく機能します。「テキストの設定」部分に可変要素と固定要素を導入する方法があるかどうか疑問に思っていました。
最終的に、あなたが作業を手伝ってくれたスクリプトから 3 つまたは 4 つの異なるグラフを取得しています。今度は、各グラフのタイトルを 1 つのセルからテキストを取得し、それを別のテキスト (別のセルから、または直接記述) に組み込むようにしたいと考えています。脚本にこだわる必要はありません。
自分自身を説明すると、現在のところ、私のグラフのタイトルは「分析物結果」になります (これは、以前よりもすでに何リーグも進んでいます)。さらに一歩進めて、「グラフ 5 : [分析物]」のようなものにしたいと考えています。 res]」というように、「analyte res」の部分を変更するだけでタイトルが変更されます。同様に、y 軸に「[分析物] [測定量 (質量、濃度、体積、...)] [単位 (g、mg/L、cm3...)」というラベルを付けることができれば便利です。 )]」を使用すると、異なるグラフごとに必要に応じて、選択したセルの 3 つの変数をそれぞれ変更できます。
「set text」パラメータを試してみましたが、そのような混合システム(または複数のセルから取得することさえ)は好きではないようです。したがって、私の最も有望な回避策は、タイトルと Y 軸の横にテキスト ボックスを追加することです。ただし、もちろん、これは洗練された解決策ではなく、場合によっては 2 つのテキスト ボックスが重ならないように注意する必要があると思います。 ...
何か案は?
Re: グラフの軸とタイトルを変数として設定する)親愛なるジム、それはありがとう、それでうまくいきました!
Re: グラフの軸とタイトルを変数として設定するデータテーブルに新しい情報列を追加しました

そして、ラベルの値を取得するために使用するようにスクリプトを変更しました。また、より直接的な方法でチャートに基準線を追加するようにスクリプトを変更しました。

Names Default To Here( 1 );
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 743, 472 ),
Show Control Panel( 0 ),
Variables( X( :COLA, Order By( :Res, Ascending, Order Statistic( "Mean" ) ) ), Y( :Res ), Interval( :Ures ) ),
Elements( Points( X, Y, Legend( 7 ) ) ),
SendToReport(
Dispatch( {}, "COLA", ScaleBox, {Label Row( {Label Orientation( "Vertical" ), Set Font Size( 12 ), Set Font Style( "Italique" )} )} ),
Dispatch( {}, "Res", ScaleBox, {Min(), Max(), Inc(), Minor Ticks( 1 )} ),
Dispatch( {}, "400", LegendBox, {Legend Position( {7, [-1, -3]} )} )
)
);
gbr = gb << report;
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 11], "Solid", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 9], "Dotted", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 10], "Dotted", "Dark Blue", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 4], "Solid", "Dark Red", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( {dt[1, 7], dt[1, 8]}, "Solid", "Medium Dark Red", "", 1, 0.15 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 7], "Dotted", "Dark Red", "", 1 );
gbr[AxisBox( 2 )] << Add Ref Line( dt[1, 8], "Dotted", "Dark Red", "", 1 );
gbr[TextEditBox(1)] << set text(column(dt,"info")[1]);
gbr[TextEditBox(3)] << set text(column(dt,"info")[2]);
gbr[TextEditBox(4)] << set text(column(dt,"info")[3]);