Agregar variable en el generador de gráficosTengo una tabla de datos con varias columnas y filas.
Quiero recorrer cada columna y agregarla al generador de gráficos en el eje x
Este es mi guión simple
dt = Open( filepath );
all_cols = dt << Get Column Names( "String" );
cols_to_plot={};
For Each ({col}, all_cols,
If(col == "A" || col == "B",,
Insert into (cols_to_plot, col);
)
);
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
graph << Add Variable ("X", Column(dt, col)); // Also tried graph << Add Variable (X, Column(dt, col));
);
Este script siempre me da el siguiente error
El valor del argumento no es válido en el acceso o la evaluación de 'Agregar variable', argumento incorrecto ("X"), agregar variable ("X", columna (dt, col)) /*###*/en la línea 600
Solo para comprobarlo, si ejecuto el siguiente script, funciona bien, pero quiero trazarlo para ~1000 columnas.
graph = dt << Graph Builder(
Variables(X(cols_to_plot[1]),X(cols_to_plot[2]),X(cols_to_plot[3]));
);
¿Qué me estoy perdiendo aquí? Agradezco tu ayuda.
Editar (jthi): se agregó formato jsl
Automatización y scriptingRe: Agregar variable en el generador de gráficosNo estoy seguro exactamente de qué tipo de trama estás buscando, pero un ejemplo sería algo como esto
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
cols_to_plot = {"age", "sex"};
graph = dt << Graph Builder();
For Each ({col},cols_to_plot,
Eval(EvalExpr(
graph << Add Variable({Expr(NameExpr(AsColumn(dt, col))), Role("X")});
));
);
Verifique la sintaxis correcta del índice de secuencias de comandos para << Agregar variable y utilice la evaluación de expresiones para obtener la referencia de la columna en el formato correcto

(Dependiendo de su gráfico final, es posible que desee tomar otra ruta en la que construya toda la expresión del generador de gráficos)
Re: Agregar variable en el generador de gráficosProbé este método y también lo intenté.
For Each ({col}, cols_to_plot,
col_ref = Column(dt, col);
graph << Add variable (col_ref, Role("X"));
);
En ambos casos mi jsl se cuelga, solo tengo 1000 columnas y 500 filas en mi tabla de datos
¿Es la forma eficiente de hacerlo o hay alguna forma mejor de trazar todas las columnas de la tabla en el eje X a la vez? Si intento lo mismo en la GUI es mucho más rápido.
Re: Agregar variable en el generador de gráficos¿Qué tipo de trama estás intentando crear?
Re: Agregar variable en el generador de gráficosEstoy intentando crear un gráfico de dispersión simple, con todas las columnas en el eje X en serie.
Algo como lo siguiente

Re: Agregar variable en el generador de gráficosComo tiene tantas columnas, probablemente crearía la expresión del Constructor de Gráficos en lugar de agregar columnas una por una. Cree el gráfico manualmente, copie el script para ver cómo se ha creado y luego replíquelo con JSL. A continuación se muestra un ejemplo.
Script creado por JMP
Graph Builder(
Size(528, 458),
Show Control Panel(0),
Variables(
X(:"0.642539"n, Combine("Parallel Merged")),
X(:"0.645736349"n, Position(1), Combine("Parallel Merged")),
X(:"0.648933698"n, Position(1), Combine("Parallel Merged")),
X(:"0.652131047"n, Position(1), Combine("Parallel Merged")),
X(:"0.655328396"n, Position(1), Combine("Parallel Merged")),
X(:"0.658525745"n, Position(1), Combine("Parallel Merged")),
X(:"0.661723094"n, Position(1), Combine("Parallel Merged")),
X(:"0.664920443"n, Position(1), Combine("Parallel Merged")),
X(:"0.668117792"n, Position(1), Combine("Parallel Merged")),
X(:"0.671315141"n, Position(1), Combine("Parallel Merged")),
X(:"0.67451249"n, Position(1), Combine("Parallel Merged")),
X(:"0.677709839"n, Position(1), Combine("Parallel Merged")),
X(:"0.680907188"n, Position(1), Combine("Parallel Merged")),
X(:"0.684104537"n, Position(1), Combine("Parallel Merged")),
X(:"0.687301886"n, Position(1), Combine("Parallel Merged")),
X(:"0.690499235"n, Position(1), Combine("Parallel Merged"))
),
Elements(Points(X(1), X(2), X(3), X(4), X(5), X(6), X(7), X(8), X(9), X(10), X(11), X(12), X(13), X(14), X(15), X(16), Legend(4)))
);
Para crear esto con JSL podrías hacer algo como esto
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
Write();
Re: Agregar variable en el generador de gráficosEsto funciona perfectamente, gracias por la ayuda.
Re: Agregar variable en el generador de gráficosHola,
Tengo un problema de seguimiento con estos gráficos que tracé, no puedo guardarlos en ningún formato. Probé .jmpreport .jrp, etc., ya que no quiero guardar el gráfico en formatos estáticos png, jpg, quiero guardar un gráfico interactivo con datos incrustados en él.
nw = New Window("printing window",
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
); <BR /><BR />reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath); Also tried
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Show Window(1),
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Show Window;
newWindow = Window (gb);
reportpath = ::my_dir_path||"/metadata/"||metaTestfile;
newWindow<< Save(reportpath );
The script doesn't throw any error in any case but also not saving the graph
Re: Agregar variable en el generador de gráficosScripting Index generalmente tiene las respuestas para scripting (<< Guardar informe de ventana)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Functional Data/NMR DoE.jmp");
nrmcols = dt << get column group("NMR Spectra");
colnames = Transform Each({col}, nrmcols,
AsColumn(dt, col) << get name;
);
colnames = colnames[1::20];
var_expr = Expr(Variables());
points_expr = Expr(Points());
For Each({colname, idx}, colnames,
x_expr = EvalExpr(X(Expr(NameExpr(AsColumn(dt, colname))), Position(1), Combine("Parallel Merged")));
point_expr = EvalExpr(X(Expr(idx)));
Insert Into(var_expr, Name Expr(x_expr));
Insert Into(points_expr, Name Expr(point_expr));
);
gb = Eval(Substitute(
Expr(dt << Graph Builder(
Size(528, 458),
Show Control Panel(0),
_var_,
Elements(_points_)
)),
Expr(_var_), Name Expr(var_expr),
Expr(_points_), Name Expr(points_expr)
));
gb << Save Window Report("$DOWNLOADS/test.jrp", embed data(1));
// demo purposes
Close(dt, no save);
wait(1);
Open("$DOWNLOADS/test.jrp");
Write();