Scripters Club 录音:Graph Builder 中的 JSL视频 1
主持人@Emmanuel_Romeu
视频 2
主持人: @jthi
回复:Scripters Club 录音:Graph Builder 中的 JSL我使用的脚本
回复:Scripters Club 录音:Graph Builder 中的 JSLTeams 聊天中的几个问题
问题一:
是否有一个 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 更相关,与脚本没有直接关系。您能否演示如何在图表中突出显示或识别样本?以及如何只为其中一个样本添加标签,以及如何为某些特定样本添加标签。
答案2:
不同类型的数据(和 JMP 版本)可能需要不同类型的标记技术。在最坏的情况下,您可能需要编写脚本,但通常这不是必要的。
我将采用 JMP18 和简单数据的假设。我有这样的图表,我希望标记和着色突出显示的点

只需标记该行并添加颜色行状态,它就会像这样突出显示

这个插件还提到了列快速交换器 - 在图形生成器中轻松更改多个 Y 轴和 X 轴列
回复:Scripters Club 录音: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");
回复:Scripters Club 录音: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 轴,情况会有所不同。
回复:Scripters Club 录音:Graph Builder 中的 JSL嗯……
“免费”获得这项奖励分析挑战总是很有趣的
- 除了分析之外,你还会得到“报酬”;)
回复:Scripters Club 录音:Graph Builder 中的 JSL脚本指南中的几个链接(不一定与图形生成器的 JSL 直接相关)
回复:Scripters Club 录音:Graph Builder 中的 JSL自 JMP18 以来,按变量的工作方式略有不同,并且有新的选项。如果您觉得自己经常使用按变量,我建议您从脚本索引中查看组平台。例如,它包含“组平台”,这可能不时有用,因为您可以控制获取哪个引用(最高级别或列表中的所有平台)

使用 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};