Registrazione Scripters Club: JSL in Graph BuilderVideo 1
Presentatore @Emmanuel_Romeu
Video2
Presentatore: @jthi
Re: Registrazione Scripters Club: JSL in Graph BuilderScript che ho usato
Re: Registrazione Scripters Club: JSL in Graph BuilderAlcune domande dalla chat di Teams
Domanda 1:
esiste un comando Xpath che corrisponde a
Dispatch( {}, "X title", TextEditBox,
Risposta 1:
Il modo più semplice per controllare è usare << Get XML e controllare se riesci a trovare "X title" da lì. Non puoi (quegli "elementi di visualizzazione" potrebbero essere gli stessi dell'attributo helpKey ma non sono stati aggiunti a tutto).


Ma è possibile creare un XPath complicato per ottenere le caselle di modifica del testo degli assi (penso che il primo sia sempre l'asse 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>
Puoi basare il tuo XPath sulla ricerca di GraphBuilderComponentBox + GraphBuilderAxisBox e GraphBuilderComponentBox + GraphBuilderTitleBox precedenti
//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();
Domanda 2:
Questa domanda è più legata a Graph Builder, non direttamente a Scripts. Potresti mostrare come evidenziare o identificare un campione nel grafico? E come aggiungere un'etichetta a uno solo dei campioni, e in aggiunta ad alcuni campioni specifici.
Risposta 2:
Diversi tipi di dati (e versioni JMP) possono richiedere diversi tipi di tecniche di etichettatura. Nel caso peggiore potresti dover scrivere uno script, ma di solito non è necessario.
Partendo dall'ipotesi di JMP18 e dati semplici. Ho un grafico come questo e desidero etichettare e colorare il punto evidenziato

Semplicemente etichettando quella riga e aggiungendo lo stato della riga colorata, verrà evidenziata in questo modo

Questo componente aggiuntivo è stato anche menzionato Column Quick Swapper: cambia facilmente più colonne degli assi Y e X in Graph Builder
Re: Registrazione Scripters Club: JSL in Graph BuilderGrazie per le risposte.
Mi chiedo perché non ci sia niente come:
current report() << XPath("//TextEditBox[@type='X title']")
caso applicativo reale:
ottenere il titolo dell'asse Y inferiore in un grafico con 2 etichette dell'asse x e 2 etichette dell'asse y
Dispatch( {}, "Y 1 title", TextEditBox,è meraviglioso rispetto all'indovinare la voce giusta in questa lista:
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
Re: Registrazione Scripters Club: JSL in Graph BuilderPuoi ancora renderlo abbastanza robusto
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();
Peccato che sia "titolo Y 1" e non "titolo Y" (o forse dovrebbe essere sempre "titolo Y 1" e non dovremmo nemmeno avere solo "titolo Y"), quindi sarà diverso se hai uno o più assi y.
Re: Registrazione Scripters Club: JSL in Graph BuilderMmmh...
è sempre divertente ricevere questa sfida di analisi bonus "gratuitamente"
- oltre all'analisi per cui sei "pagato";)
Re: Registrazione Scripters Club: JSL in Graph BuilderPochi link da Scripting Guide (non necessariamente direttamente correlati a JSL per il generatore di grafici)
Re: Registrazione Scripters Club: JSL in Graph BuilderDa JMP18 le variabili By funzionano in modo leggermente diverso e ci sono nuove opzioni. Se pensi di usare molto le variabili By, ti consiglio di dare un'occhiata a Group Platform da scripting index. Ad esempio, contiene "Group Platform" che potrebbe essere utile di tanto in tanto, perché puoi controllare quale riferimento ottenere (livello più alto o tutte le piattaforme in un elenco)

Ci sono considerazioni simili con Where Filter by Value Using a Where Statement (jmp.com) . Una di queste considerazioni potrebbe essere quale tabella dati stanno utilizzando o quale espressione 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};