Cómo agregar dinámicamente declaraciones de elementos a un gráfico usando JSLHola, soy bastante nuevo en JMP y JSL, pero estoy bastante familiarizado con la programación. Estoy intentando crear un script JSL que tome una lista de nombres de parámetros (que defino en el array "PlotVars") y luego los represente en gráficos separados en el mismo gráfico. Quiero que este script funcione independientemente de cuántos parámetros estén definidos en este array (por si quiero añadir o quitar parámetros para cada uso). Puedo hacer que mi script genere esto (usando el código a continuación), pero todos los gráficos usan puntos por defecto, y me gustaría que usaran una línea. Entiendo cómo hacerlo usando múltiples declaraciones de elemento para cada posición. Creo que el problema radica en la segunda línea, donde inicializo la variable "var_line". Si la inicializo como Expr(), generará las declaraciones de elemento, pero no las ejecutará correctamente. Lo mismo ocurre si las inicializo como Parse(). Estoy abierto a cualquier idea para resolver esto. Estoy usando JMP 18.
Editar (jthi): Se agregó formato jsl
var_expr = Expr(
Variables(X(As Column("Start Alignment of " || DataSet_1)))
);
var_line = Expr();//Unable to dymanically add elements to the graph. still unsure why
For(i = 1, i <= N Items(PlotVars), i++,
Insert Into(var_expr, Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_1), )));
Insert Into(
var_expr,
Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_2), Position(Expr(i)), ))
);
Insert Into(
var_line,
Eval Expr(Elements(Position(1, Expr(i)), Line(X, Y(1), Y(2)), Legend(4)))
);
);
plot = Substitute(
Expr(
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(Size(809, 629), Show Control Panel(0), vvv, yyy)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(test)
);
Eval(plot);
<
var_expr = Expr(Variables(X( como columna("Inicio de alineación de " || DataSet_1) )));
var_line = Expr();//No se pueden agregar elementos dinámicamente al gráfico. Todavía no estoy seguro de por qué.
para (i=1, i<=N elementos(PlotVars),i++,
Insertar en (var_expr, Eval Expr(Y( como columna(PlotVars[expr(i)] || " de " || DataSet_1),)));
Insertar en (var_expr, Eval Expr(Y( como columna(PlotVars[expr(i)] || " de " || DataSet_2), Posición(expr(i)),)));
Insertar en(var_linea, Eval Expr(Elementos(Posición(1,expr(i)),Línea(X,Y(1),Y(2)),Leyenda(4))));
);
trama = Sustituir(
Expr(
Tabla de datos("Comparación de" || Conjunto de datos_1 || "con" || Conjunto de datos_2 ) <<
Constructor de gráficos(
Tamaño(809, 629),
Mostrar panel de control (0),
oficina de turismo,
aaa
)),
Expr(vvv), Nombre Expr(var_expr),
Expr(aaa), Nombre Expr(prueba)
);
Eval(trama);
>
Automatización y scriptingRe: Cómo agregar dinámicamente declaraciones de elementos para un gráfico usando JSL¿Cómo quieres que se vea tu gráfico? ¿Cómo se ve el script cuando lo crea JMP? ¿Cómo se compara con el script que creaste con JSL?
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(
X(As Column("Start Alignment of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_2), Position(1)),
Y(As Column(PlotVars[2] || " of " || DataSet_1)),
Y(As Column(PlotVars[2] || " of " || DataSet_2), Position(2))
),
test
)
También hay bastante material relacionado con la creación dinámica de generadores de gráficos. Aquí tienes algunas grabaciones del Club de Scripters: JSL en el Generador de Gráficos . Responder a todos: Cómo crear scripts de contenido dinámico para el Generador de Gráficos.
Re: Cómo agregar dinámicamente declaraciones de elementos para un gráfico usando JSLEl script crea los gráficos exactamente como los quiero, excepto que los crea usando puntos/suavizado en las declaraciones de elemento (tenga en cuenta que se eliminan las variables para acortar la longitud del script). Este es el código gráfico de la salida del script:
Graph Builder(
Size( 809, 629 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 1 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 2 ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 4 ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 7 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 8 ) )
),
Elements(
Position( 1, 5 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 9 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 10 ) )
)
);
Y preferiría utilizar Líneas en su lugar:
Graph Builder(
Size( 696, 590 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements( Position( 1, 1 ), Line( X, Y( 1 ), Y( 2 ), Legend( 11 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y( 1 ), Y( 2 ), Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Line( X, Y( 1 ), Y( 2 ), Legend( 13 ) ) ),
Elements( Position( 1, 4 ), Line( X, Y( 1 ), Y( 2 ), Legend( 14 ) ) ),
Elements( Position( 1, 5 ), Line( X, Y( 1 ), Y( 2 ), Legend( 15 ) ) )
);
Al intentar insertar en la instrucción elements, simplemente se agrega una instrucción elements anidada en lugar de instrucciones elements separadas. Y el generador de gráficos parece ignorar estas instrucciones elements anidadas.
Re: Cómo agregar dinámicamente declaraciones de elementos para un gráfico usando JSL
Ver más...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
plotvars = {"NPN1", "NPN2", "NPN3", "NPN4", "PNP1"};
xcol = "wafer";
gb_expr = Expr(Graph Builder(Size(809, 629), Show Control Panel(0)));
var_expr = EvalExpr(Variables(X(Expr(NameExpr(As Column(dt, xcol))))));
For Each({colname, idx}, plotvars,
Insert Into(var_expr, Eval Expr(Y(Expr(NameExpr(As Column(dt, colname))))));
);
Insert Into(gb_expr, Name Expr(var_expr));
For(idx = 1, idx <= N Items(plotvars), idx++,
elem_expr = Substitute(
Expr(Elements(Position(1, _pos_), Line(X, Y, Legend(_lgnd_)))),
Expr(_pos_), idx,
Expr(_lgnd_), idx
);
Insert Into(gb_expr, Name Expr(elem_expr));
);
// Show(gb_expr);
gb = Eval(EvalExpr((Send(dt, Expr(gb_expr)))));
gb_expr = Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(X(:wafer), Y(:NPN1), Y(:NPN2), Y(:NPN3), Y(:NPN4), Y(:PNP1)),
Elements(Position(1, 1), Line(X, Y, Legend(1))),
Elements(Position(1, 2), Line(X, Y, Legend(2))),
Elements(Position(1, 3), Line(X, Y, Legend(3))),
Elements(Position(1, 4), Line(X, Y, Legend(4))),
Elements(Position(1, 5), Line(X, Y, Legend(5)))
);
Re: Cómo agregar dinámicamente declaraciones de elementos para un gráfico usando JSL¡Genial! Esta idea funcionó. Solo necesitaba insertar el comando Elementos en el generador de gráficos, no intentar integrar los comandos Elementos en una expresión.