Hola. Me interesa saber que existe un método de secuencia de comandos para leer los valores mostrados para un eje en Graphbuilder y devolverlos como una lista. OIA, ¿existe alguna función o mensaje que pueda "obtener" los valores de los ejes de una referencia del generador de gráficos o de un cuadro de ejes? Algo como: xval_lis = gb << Obtener valores del eje X.
Por ejemplo, supongamos que tengo el siguiente gráfico:

dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
)Aquí, dado que el usuario ha excluido ciertas edades utilizando el filtro de datos local, no todas las edades de la tabla se muestran en el eje x. En este caso, me gustaría encontrar una forma de leer qué edades se muestran realmente en el gráfico. Esta pregunta se aplica sólo cuando se utiliza una variable de tipo nominal u ordinal para el eje (no variables continuas).
He considerado el siguiente método de secuencias de comandos:
1. Leer el filtro de datos local.
2. Cree una tabla de subconjunto solo de las filas sin filtrar.
3. Utilice la función Resumir en esa tabla para obtener mi lista de valores de eje mostrados.
ldf_str = ldf << Get Where Clause; //ldf = reference to local data filter in gb window
clause = Parse(Regex(ldf_str, "Select Where\((.+)\)$", "\1"));
r = dt << Get Rows Where(Eval(clause)); //dt = ref to main datable
dtsub = dt << Subset(//Invisible,
Selected Rows(0),
Rows(r),
Selected columns only(0)
);
Summarize(dtsub, xlev_lis = By(:age, :sex));
Sin embargo, este método parece difícil de manejar. ¿Existe algún comando que pueda "obtener" los valores de los ejes de una referencia del generador de gráficos o de un cuadro de eje?
@nikles,
Sin embargo, no estoy seguro de su escenario de usuario, si el usuario está filtrando activamente, también puede cambiar la estructura de GraphBuilder, diferentes roles, etc. Por lo tanto, un controlador de cambio de filtro sería más sólido. También tenga en cuenta que la cláusula Where() no captura el inverso. El script y el cuadro de texto del Where capturan el inverso como un Not (!)

A continuación y adjunto se encuentra un script que obtiene los Xticks y los imprime en el Registro cuando cambia el filtro. Aquí hay una captura de pantalla del registro incrustado con comentarios (//) y cambios de línea adicionales.

Names Default to Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size(513, 406),
Show Control Panel(0),
Back Color("White"),
Variables(X(:age), X(:sex, Position(1)), Y(:weight)),
Elements(Points(X(1), Y, Legend(1)), Smoother(X(1), Y, Legend(2))),
Local Data Filter(
Add Filter(
columns(:age),
Where(:age == {12, 13, 14}),
Display(:age, Size(170, 96), List Display)
)
),
SendToReport(Dispatch({}, "", AxisBox, {Select}))
);
//iftb = (report(gb)[PictureBox(1)]<<SIB></SIB>
<P>Notas:</P>
<UL>
<LI>Se comenta la línea 20; muestra cómo obtener un identificador del cuadro de texto Where.</LI>
<LI>Las características clave de la función f utilizada para el controlador de cambios de filtro son las capacidades de la implementación JMP de Associative Array: múltiples métodos para definirlo; obtener valores únicos en una lista; casi cualquier objeto JMP se puede utilizar como clave.</LI>
<LI>Otras características clave son: dt[ zz, _xvar_] es una lista de valores de fila y ldf << obtiene filas filtradas.</LI>
</UL>
<P> </P>
<P> </P>
<P> </P>
<P> </P>