Enviar comandos a múltiples gráficos bivariadosTengo un script que genera una serie de gráficos bivariados dentro de una sola ventana, usando un LineUpBox para contener cada gráfico.Después de que se hayan creado los gráficos, quiero que el usuario tenga la opción de activar/desactivar los puntos del gráfico (tengo la intención de agregar otras opciones... esto sirve solo como un ejemplo).Imagino un cuadro de botón o una casilla de verificación en la ventana en la que el usuario puede hacer clic, y todos los gráficos reflejarán esta acción.
Para una sola trama, usaría el comando:
bvp << Show Points(0/1);
donde bvp es la referencia a la gráfica bivariada.Sin embargo, aquí tengo varias parcelas y no puedo usar una sola referencia para todas.Intenté hacer referencia a mi LineUpBox que contiene las parcelas en su lugar:
For(plid = 1, plid <= nplots, plid++,
LUB_plots[plid] << Show Points(pts)
)
donde LUB_plots es la referencia a mi lineupbox.Este bucle se ejecutaría cada vez que el usuario marca la casilla de verificación, por ejemplo.Cuando hago esto, obtengo los siguientes errores:
The display box 'OutlineBox' does not recognize the message 'Show Points'; perhaps you mean one of these: <<Show Properties <<Show HelpKeys <<SetHorizontal <<Horizontal <<SetOpen <<GetHorizontal <<Close Where No Outlines <<Font <<Set Font <<Set Font Style <<Set Font Size <<Reshow <<Set Report Title <<Set Window Title <<Top Parent <<Show Tree Structure <<Restore Window Size <<Set Window Size <<Set Content Size <<Get Window Position <<Show Window <<Get Show Window <<Set Window Title <<Set Window Icon <<Set Print Headers <<Set Print Footers <<Scroll Window <<Set Width <<Set Height <<Horizontal Alignment.
y una instancia de lo siguiente para cada parcela:
(The following message might not be an actual error; the preference 'Report Invalid Display Box Messages' is ON.) The display box 'OutlineBox' does not recognize the message 'Show Points'.
Revisé la estructura de árbol y confirmé que sí, el cuadro de visualización superior es de hecho un cuadro de contorno.Así que al menos sé que LineUpBox[plid] está apuntando a donde esperaba.El problema parece ser que mi comando <
Mi pregunta: ¿Cómo puedo hacer referencia a múltiples gráficos bivariados?Alternativamente, ¿existe una mejor manera de enviar comandos a múltiples gráficos bivariados después de que se hayan creado?¿Quizás usando algún tipo de estructura de comando Dispatch/SendtoReports?
No estoy seguro de cómo buscar en la comunidad para este.Cualquier ayuda es apreciada.
Re: Enviar comandos a varios gráficos bivariadosGracias de nuevo.Elegante.
Re: Enviar comandos a varios gráficos bivariadosEsta sintaxis parece funcionar:
y_axes = (lub << xpath("//AxisBox[@charID='2']"));
y_axes << scale(Log);
Para la documentación xpath, ver por ejemplo Tutorial de w3schools sobre XPath
Re: Enviar comandos a varios gráficos bivariados¡Gracias!El xpath cmd funciona muy bien para mi ejemplo de mostrar puntos.
Ahora tengo un seguimiento.¿Cómo puedo enviar un comando a todas mis parcelas que cambie el eje y de lineal a logarítmico?Para empezar, intenté usar el comando xpath con la intención de crear una lista de todas las referencias a todos los cuadros del eje y.Primero estoy tratando de confirmar que el comando xpath está extrayendo las referencias correctas.Pero parece que no puedo hacer que devuelva solo esas cajas.Al inspeccionar el código xml en el registro, pude ver que todos los cuadros del eje y tienen un "charID=\!"2\!"", así que estoy tratando de usar eso para diferenciar las y de las x, pero no suerte.
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
Try(Window("example") << Close Window);
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
Show(lub << Get xml);
Show(lub << xpath("//AxisBox")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[2]")); //empty list
Show(lub << xpath("//AxisBox['2']")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[\!"2\!"]")); //list of 8 displayboxes
Show(lub << xpath("//AxisBox[charID=\!"2\!"]")); //empty list
Show(lub << xpath("//AxisBox[\!"charID=2\!"]")); //list of 8 displayboxes¿Cómo puedo hacer que xpath devuelva solo los 4 ejes y?
Una vez que logré generar las referencias a los cuadros de eje específicos que quiero, ¿debo enviar el comando "Obtener objeto programable" como en su ejemplo anterior, o puedo simplemente enviar el comando "Escala" directamente a la lista de referencias?
Leí la presentación de JMP Summit y los ejemplos de código .jsl que proporcionó... muy útiles.Sin embargo, la documentación adicional es escasa en el Índice de secuencias de comandos y parece no existir en la Guía de secuencias de comandos.¿Hay más documentación disponible en xpath?Me gustaría saber cuál es el formato para la entrada.Por ejemplo, ¿qué hace el "//" al principio?¿Y cómo debo formatear el resto de la entrada para obtener los cuadros de visualización que necesito?
Gracias.
Re: Enviar comandos a varios gráficos bivariadosO mucho más simple con xpath , inspirado en una presentación de JMP Summit que se acaba de publicar aquí :
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
nw = New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots
L = (lub << xpath("//LineUpBox/OutlineBox")) << get scriptable object;
// Send messages to all plots, e.g
L << show points(0);
Re: Enviar comandos a varios gráficos bivariadosEl mostrar puntos() el mensaje debe ser enviado al bivariado objeto en lugar de a su cuadro de visualización superior. A partir de un árbol de visualización existente, se puede obtener una referencia al objeto asociado mediante < .
Un ejemplo que también ilustra una forma de enviar mensajes a varias parcelas:
Names Default To Here(1);
//Example report
Open("$SAMPLE_DATA/Big Class.jmp");
New Window("example",
lub = Lineup Box(
Bivariate(Y(:weight), X(:height), FitLine()),
Bivariate(Y(:weight), X(:age), FitLine()),
Bivariate(Y(:age), X(:age), FitLine()),
Bivariate(Y(:weight), X(:weight), FitLine())
)
);
//Make list of plots (here top-level Outline boxes)
L = {};
i = 1;
While(Is Scriptable(Try(lub[Outline Box(i)])),
If((lub[Outline Box(i)] << parent) << classname == "LineUpBox",
Insert Into(L, lub[Outline Box(i)] << get scriptable object)
);
i++;
);
// Send messages to all plots, e.g
L << show points(0);