Usar expresiones para formato de temaEstoy tratando de convertir el formato de varios gráficos similares en una expresión para poder cambiar una sola sección del código para actualizar todos los gráficos que se parecen. Sin embargo, me cuesta implementarlo en el código. Incluyo un ejemplo de trabajo mínimo que muestra cómo me gustaría que se vea un gráfico y cómo me gustaría que se vea mi código, almacenando un fragmento de código para el formato y un código compacto para cada gráfico. ¿Alguna idea de cómo puedo modificar esto para que funcione? Estoy trabajando en la versión 15.2 de JMP.
dt = New Table( "Minimal Working Example",
Add Rows( 400 ),
New Column( "X", Numeric, Set Values( Repeat( 1 :: 20, 20 ) ) ),
New Column( "Y", Numeric, Set Values( Sort Ascending( Shape( Repeat( 1 :: 20, 20 ), 1 ) ) ) ),
New Column( "Size", Numeric, <<FORMULA></FORMULA>
GráficosScriptingRe: uso de expresiones para formato de temaHola,
El manejo de expresiones es poderoso y requiere un poco de práctica. Aquí hay un ejemplo para comenzar, pero querrá leer sobre cosas como Eval (), Expr (), NameExpr (), Substitute (), Substitute Into (), etc.
Names Default To Here(1);
//make a 5-column table
dt = astable((1::20)` || J(20,4,randominteger(0,20)));
//the x column will be the first column
xCol = column (dt, 1);
//the y columns will be the remaining columns
yColList = (dt << get column names())[2::ncol(dt)];
//write the graph builder script, wrapping it in an expression. Use _XXX_ format for things
//you'll be substituting later. Here, that is just the "y" variable for a particular graph.
gbExpr = expr(
dt << Graph Builder(
Variables( X( xcol ), Y( _Y_ ) ),
Elements( Points( X, Y, Legend( 8 ) ) ),
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
8,
Properties(
0,
{gradient( {Color Theme( "White to Red" )} )},
Item ID( "Size", 1 )
)
)}
),
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {8, [0, -1]} ), Legend Position( {0, -1} )}
)
)
);
);
//cycling through the items in yColList, we create a graph for each y variable vs the x variable.
//be sure to read up on Name Expr ( ), as it is needed here to prevent evaluation of the Graph
//Builder script... we just want the code itself... we don't want JMP to try to evaluate the code
//until after we've made the substitution.
for (i = 1,i <=nitems(ycolList), i++,
eval(Substitute( nameExpr(gbExpr), expr(_Y_) , expr(yColList[i])));
);
Salud,
Brady
Re: uso de expresiones para formato de temaEso no funcionó muy bien debido a las formas en que las variables X, Y y Color cambian en mis datos, sin embargo, logré encontrar una solución más cercana a lo que quería usando JSL Quote, Eval Insert, Parse y Eval:
// A theme format I could change for a gazillion of plots
formats = JSL Quote(
SendToReport(
Dispatch(
{},
"400",
ScaleBox,
{Legend Model(
8,
Properties(
0,
{gradient( {Color Theme( "White to Red" )} )},
Item ID( "Size", 1 )
)
)}
),
Dispatch(
{},
"400",
LegendBox,
{Legend Position( {8, [0, -1]} ), Position( {0, -1} )}
)
)
);
// How I would like each plot code to look like
Eval(Parse(Eval Insert("dt << Graph Builder(
Variables( X( :X ), Y( :Y ), Color( :Size ) ),
Elements( Points( X, Y, Legend( 8 ) ) ),
^formats^
);")));