Scripters Club 레코딩: Graph Builder의 JSL영상 1
발표자 @Emmanuel_Romeu
영상 2
발표자: @jthi
Re: 스크립터 클럽 녹음: Graph Builder의 JSL내가 사용한 스크립트
Re: 스크립터 클럽 녹음: Graph Builder의 JSLTeams 채팅에서 몇 가지 질문
질문 1:
에 해당하는 Xpath 명령이 있습니까?
Dispatch( {}, "X title", TextEditBox,
답변1:
가장 쉬운 확인 방법은 << Get XML을 사용하여 거기에서 "X title"을 찾을 수 있는지 확인하는 것입니다. 찾을 수 없습니다(그 "디스플레이 요소"는 helpKey 속성과 동일 할 수 있지만 모든 것에 추가되지 않았습니다).


하지만 복잡한 XPath를 구축하여 축 텍스트 편집 상자를 가져올 수 있습니다(제 생각에는 항상 X축이 첫 번째입니다).
GraphBuilderAxisBox <GRAPHBUILDERCOMPONENTBOX leftoffset="47" topoffset="435" width="478" height="19">
<GRAPHBUILDERTITLEBOX width="478" height="19">
<TEXTEDITBOX leftoffset="223" topoffset="0" width="31" height="19">My X</TEXTEDITBOX>
</GRAPHBUILDERTITLEBOX>
</GRAPHBUILDERCOMPONENTBOX>
<GRAPHBUILDERCOMPONENTBOX leftoffset="47" topoffset="408" width="478" height="27">
<GRAPHBUILDERAXISBOX width="478" height="27">
<AXISBOX width="478" height="27" charid="1000"></AXISBOX>
</GRAPHBUILDERAXISBOX>
</GRAPHBUILDERCOMPONENTBOX>
GraphBuilderComponentBox + GraphBuilderAxisBox와 그 이전의 GraphBuilderComponentBox + GraphBuilderTitleBox를 찾아 XPath를 기반으로 할 수 있습니다.
//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(525, 454),
Show Control Panel(0),
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(3))),
SendToReport(
Dispatch({}, "X title", TextEditBox, {Set Text("My X")}),
Dispatch({}, "Y title", TextEditBox, {Set Text("My Y")})
)
);
nw = New Window("gbscript", << type("Script"), << Language("XML"),
Report(gb) << Get XML;
);
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
axis_title_tebs[1] << Set Text("XXXXX");
axis_title_tebs[2] << Set Text("YYYYY");
Write();
질문 2 :
이 질문은 Graph Builder와 더 관련이 있지만 Scripts와는 직접 관련이 없습니다. Graph에서 샘플을 강조하거나 식별하는 방법을 보여 주시겠습니까? 그리고 샘플 중 하나에만 레이블을 추가하는 방법과 일부 특정 샘플에 레이블을 추가하는 방법도 알려주세요.
답변 2:
다양한 유형의 데이터(및 JMP 버전)에는 다양한 유형의 레이블링 기술이 필요할 수 있습니다. 최악의 경우 스크립트를 작성해야 할 수도 있지만 일반적으로 이는 필요하지 않습니다.
저는 JMP18과 간단한 데이터를 가정하고 가겠습니다. 저는 이런 그래프를 가지고 있고 강조된 지점에 라벨을 붙이고 색을 입히고 싶습니다.

해당 행에 레이블을 지정하고 색상 행 상태를 추가하기만 하면 이와 같이 강조 표시됩니다.

이 추가 기능은 또한 Column Quick Swapper에 대해 언급되었습니다. Graph Builder에서 여러 Y축 및 X축 열을 쉽게 변경합니다.
Re: 스크립터 클럽 녹음: Graph Builder의 JSL답변해 주셔서 감사합니다.
왜 이런 것이 하나도 없는지 궁금하네요.
current report() << XPath("//TextEditBox[@type='X title']")
실제 적용 사례:
2개의 x축 레이블과 2개의 y축 레이블이 있는 그래프에서 하단 Y축 제목을 가져옵니다.
Dispatch( {}, "Y 1 title", TextEditBox,이 목록에서 올바른 항목을 추측하는 것과 비교하면 정말 훌륭합니다.
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
Re: 스크립터 클럽 녹음: Graph Builder의 JSL아직도 상당히 견고하게 만들 수 있습니다
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 448),
Show Control Panel(0),
Variables(X(:sex), X(:age), Y(:weight), Y(:height), Overlay(:sex)),
Elements(Position(1, 1), Points(X, Y, Legend(24))),
Elements(Position(1, 2), Points(X, Y, Legend(25))),
Elements(Position(2, 1), Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
Elements(
Position(2, 2),
Points(X, Y, Legend(16)),
Line Of Fit(X, Y, Legend(17))
)
);
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
xcount = gb << Get N Positions("X");
firstyaxis = axis_title_tebs[xcount + 1];
Show(firstyaxis << get text);
Write();
아쉽게도 "Y 1 제목"이고 "Y 제목"이 아닙니다(아니면 항상 "Y 1 제목"이어야 하고 "Y 제목"만 사용해서는 안 될지도 모릅니다). 따라서 y축이 하나든 여러 개든 다를 것입니다.
Re: 스크립터 클럽 녹음: Graph Builder의 JSL음...
이 보너스 분석 챌린지를 "무료로" 받는 건 항상 재밌어요
- 분석 외에도 "돈을 받는다";)
Re: 스크립터 클럽 녹음: Graph Builder의 JSLScripting Guide의 몇 가지 링크(그래프 빌더용 JSL과 직접 관련이 있는 것은 아님)
Re: 스크립터 클럽 녹음: Graph Builder의 JSLJMP18 이후로 By 변수는 약간 다르게 작동하며 새로운 옵션이 있습니다. By 변수를 많이 사용하는 것 같다면 스크립팅 인덱스에서 Group Platform을 확인해 보세요. 예를 들어 "Group Platform"이 포함되어 있어 어떤 참조를 받을지 제어할 수 있으므로 가끔 도움이 될 수 있습니다(가장 높은 수준 또는 목록의 모든 플랫폼).

Where 문을 사용하여 값별 필터링(jmp.com) 과 다소 유사한 고려 사항이 있습니다. 그러한 고려 사항 중 하나는 어떤 데이터 테이블을 활용하고 있는지 또는 어떤 where 표현식을 사용하고 있는지일 수 있습니다.
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gbs = dt << Graph Builder(
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
By(:sex)
);
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11))),
Where(:sex == "F");
);
show(gbs << Get Data Table);
show(gb << Get Data Table);
show(gbs << Get Where Expr);
show(gb << Get Where Expr);
private_tables = Find All(Data Tables, Private);
Show(private_tables << get name);
Show(private_tables << Is Linked Subset);
gbs << Get Data Table = {DataTable("sex=F"), DataTable("sex=M")};
gb << Get Data Table = DataTable("Big Class, where -sex == -F- 3");
gbs << Get Where Expr = {:sex == "F", :sex == "M"};
gb << Get Where Expr = :sex == "F";
private_tables << get name = {"sex=F", "sex=M", "Big Class, where -sex == -F-", "Big Class, where -sex == -F- 2", "Big Class, where -sex == -F- 3"};
private_tables << Is Linked Subset = {1, 1, 1, 1, 1};