JSL を使用して既存のプロットにプログラムで注釈を追加するこんにちは、みんな、
グラフビルダーでプロットを作成した後、 JSL を介してメタデータの「細かい部分」をプロットに追加したいと考えています。
以下は、JSL で実行したいことの 2 つの例です。メタデータ 1 テキスト フィールドはプロット エリア内にあり、メタデータ 2 テキスト フィールドはグラフの下部のプロット エリア外にあります。プロット例では、GUI の注釈ツールを使用してテキスト フィールドを追加しました。ただし、JSL でこれを実現する方法を理解するのは困難です。
これは私の最初の投稿です。今後ともよろしくお願いいたします。

ウィンドウズRe: JSL を使用して既存のプロットにプログラムで注釈を追加するこれは、指定したことを実行するハードワイヤードコードです

Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
// To add text within the graph one way is to use "Add Graphics Script"
// to the graph
Report( gb )[Outline Box( 1 ), framebox( 1 )] <<
add graphics script(
xMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
Text Color( "red" );
Text(
Right Justified,
{xMin + 46, yMin + 1},
"Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName"
);
Text( Right Justified, {xMin + 32, yMin + .1}, "path c:tmp/graph-01.jrp" );
);
// Add Outside of the graph
Report( gb )[Outline Box( 1 )] << Append(
V List Box(
Text Box( "Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName" ),
Text Box( "path c:tmp/graph-01.jrp" )
)
);
Re: JSL を使用して既存のプロットにプログラム的に注釈を追加するありがとう、ジム、早かったね!
これでほぼゴールに近づきました。これで望み通りのテキストを生成できるようになりました。
ただし、このようにして作成したグラフをスクリプトとして保存すると、次のようになります。
Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Add Graphics Script(
5,
Description( "" ),
xMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
Text Color( "red" );
Text(
Right Justified,
{xMin + 46, yMin + 1},
"Metadata1 " || Format( Today(), "yyyymmdd" ) || "/OwnerName"
);
Text(
Right Justified,
{xMin + 32, yMin + 0.1},
"path c:tmp/graph-01.jrp"
);
)}
)
)
)
スクリプトを実行しようとするとエラーが発生します
>オブジェクトは 'Report(gb)[ /*###*/axisbox(1)]'、Report(gb)[/*###*/axisbox(1)] のアクセスまたは評価で添字付けできません
「gb」はスクリプト内で定義されていないので、これは理にかなっていると思います。この問題を回避する方法はありますか?
Re: JSL を使用して既存のプロットにプログラム的に注釈を追加するグラフビルダーインスタンスを指す変数「gb」がありません
gb = Graph Builder(
Re: JSL を使用して既存のプロットにプログラム的に注釈を追加する確かにその通りですが、これは、たとえば「スクリプトをデータ テーブルに保存...」を使用したときに、JMP によってスクリプトが保存される方法です。
しかし、ここから Eval と EvalExpr を使用した解決策を見つけました:
https://community.jmp.com/t5/Discussions/GraphBuilder-gt-FrameBox-lt-lt-Add-Graphics-Script-V-Line-x-y1/td-p/366991
この方法ですべて動作しました:
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = dt << Graph Builder(
Size( 528, 456 ),
Show Control Panel( 0 ),
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 3 ) ), Smoother( X, Y, Legend( 4 ) ) )
);
yMin = Report( gb )[axisbox( 1 )] << get min;
yMin = Report( gb )[axisbox( 2 )] << get min;
//I need the values "hard-coded"" in the new graphics script to be added => hence i
//need to use the Eval(EvalExpr( .. )) trick from
//https://community.jmp.com/t5/Discussions/GraphBuilder-gt-FrameBox-lt-lt-Add-Graphics-Script-V-Line-x-y1/td-p/366991
Eval(EvalExpr(
Report( gb )[Outline Box( 1 ), framebox( 1 )] <<
add graphics script(
Text Color( "red" );
Text( {expr(xMin),expr(yMin)}, "path c:tmp/graph-01.jrp" );
)
));
Re: JSL を使用して既存のプロットにプログラム的に注釈を追加するジムのスクリプトを少し変更して、X原点とY原点を使用して位置を設定することもできます。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 456),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3)), Smoother(X, Y, Legend(4)))
);
Report(gb)[FrameBox(1)] << Add Graphics Script(
Text Color("Red");
Text({X Origin(), Y Origin()},
"Metadata1 " || Format(Today(), "yyyymmdd") || "/OwnerName\!Npath c:tmp/graph-01.jrp"
);
);