Hola. ¿Existe algún método para obtener los nombres y roles de las variables utilizados en una ventana del generador de gráficos? Supongamos que tengo una ventana que contiene un gráfico de creación de gráficos. ¿Hay alguna manera de determinar mediante programación qué variable se utilizó para X, Y, Xgroup, Ygroup, etc.?
Por ejemplo, supongamos que el usuario creó un gráfico en gb. Ahora desean ejecutar algún script generalizado en la trama (por ejemplo, un script gráfico). El script necesita saber qué variables se utilizaron en qué roles sin que el usuario se lo diga.
Supongamos que comienzo con esta trama:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
Ahora deseo ejecutar un script en el gráfico resultante. Mi guión desconoce lo que contiene la trama. Aquí hay 2 cosas que intenté pero no funcionaron:
Names Default to Here(1);
//Try to get script used to create plot
win = Window(1); //gets most recent window clicked on
gb = win << Report; //DNW: returns missing (win is not a platform)
scr = gb << Get Script; //from here I could parse the string to determine the roles
//Another stab: try to read the XML
win = Window(1);
str = win << Get XML; //This gives me the XML of the window, but does not provide the actual variable names used in the roles.
Si pudiera descubrir cómo convertir la referencia de la ventana en un informe, creo que podría hacer funcionar el primer método. ¿Algunas ideas?
</CODE></P></LINGO-BODY><LINGO-LABS id="lingo-labs-272624" slang="en-US" mode="NONE"><LINGO-LABEL>Modelado estadístico avanzado</LINGO-LABEL><LINGO-LABEL>La personalización en masa</LINGO-LABEL><LINGO-LABEL>Ingeniería de Calidad y Procesos</LINGO-LABEL></LINGO-LABS><LINGO-SUB id="lingo-sub-273136" slang="en-US" mode="NONE">Re: Obtener nombres de variables de Graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273136" slang="en-US" mode="NONE">Gracias. Eso era exactamente lo que necesitaba.</LINGO-BODY><LINGO-SUB id="lingo-sub-273026" slang="en-US" mode="NONE">Re: Obtener nombres de variables de Graphbuilder</LINGO-SUB><LINGO-BODY id="lingo-body-273026" slang="en-US" mode="NONE"><P><A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/3648" target="_blank">@nikles</A> Tienes razón, la funcionalidad de la etiqueta flotante se basa en la interactividad. Hay formas de activarlo usando JSL (moviendo el mouse, haciendo una pausa, etc.), pero eso agregaría mucha complejidad a la solución que realmente no necesita.</P>
<P>En base a su respuesta y la solución propuesta por<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/2687" target="_blank"> @txnelson</A> , aquí hay un script que lo llevará desde la referencia de Windows hasta las referencias de variables de Graph Builder.</P>
<PRE><CODE class=" language-jsl">Names Default to Here(1);
win = New Window("A Title", // Let's create a Window that contains a Graph Builder
Graph Builder( // with a LDF to make things interesting (multiple OutlineBoxes).
Size( 517, 448 ),
Show Control Panel( 0 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Bar( X, Y, Legend( 6 ) ) ),
Local Data Filter(
Add Filter( columns( :height ), Where( :height >= 60.048 & :height <= 70 ) )
)
));
ob = win[OutlineBox("Graph Builder")]; // This is how you get the Display Box that contains the GB object
gbb = ob << Get Scriptable Object; // Now we extract the GB object from the Display Box
gb_expr = gbb << Get Script; // You could wrap in Char() to get the GB script as a string
gb_nargs = NArg(gb_expr); // and use pattern matching. Instead,
for(i = 1, i <= gb_nargs, i++, // let's see how to inspect it as an expression.
child = Arg(gb_expr, i);
If (HeadName(child) == "Variables",
var_nargs = NArg(child);
for(j = 1, j <= var_nargs, j++,
Show(Arg(child, j))
);
Break();
)
);
debería ver:
Arg(child, j) = X(:sex);
Arg(child, j) = Y(:height);
Las extensiones de etiqueta flotante agregadas en JMP 15 le permiten definir un script que se ejecutará en el contexto de un gráfico (un contexto de ejecución de etiqueta flotante para ser precisos). Este contexto proporciona información en variables locales sobre el elemento visual sobre el que se desplaza el cursor, incluidas qué variables se utilizan como "agrupaciones" (X, GrupoX, GrupoY, etc.) y medidas (Y, Color, Tamaño, etc.).
Puede acceder a estas variables en su propio script y quizás utilizarlas para definir una nueva visualización o análisis. Así es precisamente como funcionan los ajustes preestablecidos de etiquetas flotantes. Es posible que desee seleccionar uno y luego echar un vistazo al código JSL generado en el Editor de etiquetas flotantes (o guardando el script) para ver un ejemplo.
También puede ver sus valores utilizando el ajuste preestablecido de "contexto" de Textlet (disponible en el panel Textlet en el Editor de etiquetas flotantes):

Se proporciona una lista completa de las variables que están disponibles en el contexto de ejecución. aquí.
Creí recordar una pregunta anterior sobre esto, pero busqué y no encontré ninguna.De todos modos, el método que he usado para hacer este tipo de cosas es enviar un mensaje a Graph Builder para recuperar el script usado para crear la pantalla, en una variable de carácter, y luego analizo la cadena para encontrar las variables mencionadas. .
La secuencia de comandos
names default to here(1);
dt=open("$SAMPLE_DATA/big class.jmp");
gb = Graph Builder(
Variables( X( :weight ), Y( :height ) ),
Elements( Points( X, Y, Legend( 6 ) ), Smoother( X, Y, Legend( 7 ) ) )
);
theScript = char(gb << get script);
show(theScript);
recupera:
theScript = "Graph Builder(Variables(X(:weight), Y(:height)), Elements(Points(X, Y, Legend(6)), Smoother(X, Y, Legend(7))))";