¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?El siguiente script de ejemplo hace lo que necesito para una pequeña cantidad fija de parámetros que quiero trazar en el eje Y.
¿Cómo automatizar esto para una lista que se suministra a Y desde arriba?
(La variable/columna X permanece fija, pero el número de elementos que van a Y puede cambiar y se suministra desde otro script)
Names Default To Here (1);
Clear Log ();
dt = open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height),
Y( column(dt, y_values[1]) ),
Y( column(dt, y_values[2]) ),
Y( column(dt, y_values[3]) ),
Y( column(dt, y_values[4]) )
),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);Además, ¿cómo se manejan los Elementos () en este caso?
Automatización y secuencias de comandosventanasRe: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?@hogi Gracias, me temo que necesito un poco más de ayuda ya que nunca antes había usado las funciones Expr () e Insertar NameExpr (). Sería útil si pudiera proporcionar un ejemplo con el script de ejemplo que agregué en mi OP.
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Esta no es la única opción para construir esto, pero puede dar algunas ideas. Busque también el índice de secuencias de comandos para variables y elementos para GraphBuilderbox
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);
Editar:
Un ejemplo usando Agregar variable()
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
gb = dt << Graph Builder(
// Ignore Platform Preferences(1),
Show control Panel(0),
Variables(X(:height))
);
gb << inval;
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
gb << Add Variable({Expr(Name Expr(As Column(dt, y_col))), Role("Y")})
));
// if you just want points, you shouldn't need this, but smoother idx is 2 instead of 1
/* gb << Remove Element(1, idx, 1);
Eval(EvalExpr(
gb << Add Element(1, Expr(idx), {Type("Points"), X, Y, Legend(Expr(idx))})
));
*/
);
gb << Update window;
gb << Remove Element(1, N Items(y_values), 2); // 1 or 2 for smoother idx, depending on how GB is builtRe: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?@jthi Gracias. Esto funciona para mí, pero no puedo cambiar el título del gráfico predeterminado. ¿Cómo hacer esto a través de JSL?
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Depende de lo que definas como título.
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))
);
gb << Title("Test");
Y si considera que es el cuadro de edición de texto sobre el generador de gráficos, cámbielo manualmente y luego modifique el script creado por JMP.
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("asdsad")}))
y puedes obtener aún más información si tienes JMP17 y usas propiedades

Entonces algo como
Report(gb)[TextEditBox(1)] << Set Text("12313213");
podría funcionar dependiendo de su informe
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?@jthi Gracias. Para el caso sencillo que muestra, sé cómo poner el título del gráfico (como muestra), pero ¿cómo hacerlo para el caso siguiente?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Obtenga referencia al creador de gráficos y ambas ideas deberían funcionar.
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?@jthi Gracias, pero no veo Obtener referencia () en el índice de secuencias de comandos (estoy en JMP 16.2.0). ¿Te refieres a obtener el nombre de la ventana del generador de gráficos?
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Current Report()[TextEditBox( 1 )] << set text( "NewTitle" );
Esto funciona para mí.
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Sugeriría obtener la referencia cuando evalúes la expresión que crea el gráfico. Creo
gb = Eval(gb_expr);
Deberia trabajar. También podría ser una buena idea asegurarse de que Graph Builder se cree usando dt si existe la posibilidad de que haya varias tablas abiertas. Aunque no estoy seguro de cuál sería la sintaxis más sencilla para hacerlo en este caso sin realizar pruebas.
Re: ¿Cómo pasar la variable Y en Graph Builder desde una lista en JSL?Podrías generar los símbolos var y gb para las expresiones.
Var= Expr(variables(x(:height)))
gb =Expr(Graph Builder())
Y luego usar Insertar en en un Para bucle para llenar var con Ys, luego insertar NombreExpr(var) en gb y luego usar otro Para bucle para agregar las expresiones de Elementos.