JSL을 사용하여 프로그래밍 방식으로 기존 플롯에 주석 추가안녕하세요 여러분,
그래프 빌더에서 플롯을 만든 후 JSL을 통해 일부 메타데이터 "세세한 인쇄"를 플롯에 추가하려고 합니다.
다음은 JSL로 수행하고 싶은 작업의 두 가지 예입니다. 메타데이터 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을 사용하여 기존 플롯에 프로그래밍 방식으로 주석 추가Graph Builder 인스턴스를 가리키는 변수 "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을 사용하여 기존 플롯에 프로그래밍 방식으로 주석 추가Jim의 스크립트를 약간 수정하고 X Origin과 Y Origin을 사용하여 위치를 설정할 수도 있습니다.
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"
);
);