Grabación del Club de Scripters: JSL en Graph BuilderVídeo 1
Presentero @Emmanuel_Romeu
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos)
Vídeo 2
Presentadora: @jthi
Este vídeo se está procesando actualmente. Inténtalo de nuevo en unos minutos.
(ver en Mis Videos) Re: Grabación del Club de Scripters: JSL en Graph BuilderGuión que utilicé
Re: Grabación del Club de Scripters: JSL en Graph BuilderAlgunas preguntas del chat de Teams
Pregunta 1:
¿Existe un comando XPath que corresponda a?
Dispatch( {}, "X title", TextEditBox,
Respuesta 1:
La forma más fácil de comprobarlo es usar << Obtener XML y comprobar si puede encontrar el "título X" desde allí. No puede (esos "elementos de visualización" podrían ser los mismos que el atributo helpKey, pero simplemente no se han agregado a todo).


Pero puedes crear un XPath complicado para obtener los cuadros de edición de texto de los ejes (creo que el primero siempre es el eje 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>
Puede basar su XPath en encontrar GraphBuilderComponentBox + GraphBuilderAxisBox y el GraphBuilderComponentBox + GraphBuilderTitleBox precedente.
//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();
Pregunta 2:
Sin embargo, esta pregunta está más relacionada con Graph Builder y no directamente con Scripts. ¿Podrías mostrarme cómo resaltar o identificar una muestra en el gráfico? ¿Y cómo agregar una etiqueta solo a una de las muestras y, además, a algunas muestras específicas?
Respuesta 2:
Los distintos tipos de datos (y versiones de JMP) pueden requerir distintos tipos de técnicas de etiquetado. En el peor de los casos, es posible que tengas que crear un script, pero normalmente no es necesario.
Partiré de la base de JMP18 y de datos simples. Tengo un gráfico como este y deseo etiquetar y colorear el punto resaltado.

Con solo etiquetar esa fila y agregarle un color al estado de la fila, se resaltará de esta manera.

Este complemento también se mencionó: Column Quick Swapper: cambia fácilmente varias columnas de los ejes Y y X en Graph Builder
Re: Grabación del Club de Scripters: JSL en Graph BuilderGracias por las respuestas.
Me pregunto por qué no hay nada como:
current report() << XPath("//TextEditBox[@type='X title']")
Caso de aplicación real:
Obtener el título del eje Y inferior en un gráfico con 2 etiquetas de eje X y 2 etiquetas de eje Y
Dispatch( {}, "Y 1 title", TextEditBox,Es maravilloso comparado con adivinar la entrada correcta en esta lista:
axis_title_tebs = Report(gb) << XPath("//GraphBuilderComponentBox[GraphBuilderAxisBox]/preceding-sibling::GraphBuilderComponentBox[1]/GraphBuilderTitleBox/TextEditBox");
Re: Grabación del Club de Scripters: JSL en Graph BuilderTodavía puedes hacerlo bastante 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();
Lástima que sea "título Y 1" y no "título Y" (o tal vez siempre debería ser "título Y 1" y ni siquiera deberíamos tener solo "título Y"), ya que será diferente si tiene uno o varios ejes y.
Re: Grabación del Club de Scripters: JSL en Graph BuilderHmm...
Siempre es divertido recibir este desafío de análisis adicional "gratis".
- además del análisis por el que te "pagan";)
Re: Grabación del Club de Scripters: JSL en Graph BuilderAlgunos enlaces de la Guía de creación de scripts (no necesariamente relacionados directamente con JSL para el generador de gráficos)
Re: Grabación del Club de Scripters: JSL en Graph BuilderDesde JMP18, las variables By funcionan de forma un poco diferente y hay nuevas opciones. Si cree que utiliza mucho las variables By, le sugiero que consulte Group Platform en el índice de scripts. Por ejemplo, contiene "Group Platform", que puede resultar útil de vez en cuando, ya que puede controlar qué referencia obtiene (el nivel más alto o todas las plataformas de una lista).

Existen consideraciones similares con el filtro Where por valor mediante una declaración Where (jmp.com) . Una de esas consideraciones podría ser qué tabla de datos están utilizando o qué expresión 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};