腳本編寫者俱樂部記錄:圖形產生器中的 JSL影片1
主持人@Emmanuel_Romeu
影片2
講者: @jthi
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 JSL我使用的腳本
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 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>
您可以將 XPath 建立在尋找 GraphBuilderComponentBox + GraphBuilderAxisBox 和前面的 GraphBuilderComponentBox + GraphBuilderTitleBox 的基礎上
//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:
不過,這個問題與圖形產生器更相關,與腳本沒有直接關係。您能否展示如何突出顯示或識別圖表中的樣本?以及如何僅向其中一個樣本以及某些特定樣本添加標籤。
答案2:
不同類型的資料(和 JMP 版本)可能需要不同類型的標記技術。在最壞的情況下,您可能必須編寫腳本,但通常這是不必要的。
我將採用 JMP18 和簡單資料的假設。我有這樣的圖表,我希望對突出顯示的點進行標記和著色

只需標記該行並添加顏色行狀態,它就會像這樣突出顯示

也提到了此外掛程式Column Quick Swapper - 在圖形產生器中輕鬆更改多個 Y 和 X 軸列
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 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");
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 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軸。
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 JSL嗯...
「免費」獲得這個獎金分析挑戰總是很有趣
- 除了分析之外,您還“付費”;)
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 JSL腳本指南中的連結很少(不一定與圖形產生器的 JSL 直接相關)
回覆:腳本編寫者俱樂部記錄:圖形產生器中的 JSL自 JMP18 以來,By 變數的工作方式確實有點不同,並且有新的選項。如果您覺得自己經常使用“按變數”,我建議您從腳本索引中查看“群組平台”。例如,它包含“群組平台”,有時可能會有所幫助,因為您可以控制所獲得的參考(最高等級或清單中的所有平台)

使用Where 語句按值過濾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};