Utilizzo di espressioni per il formato del temaSto cercando di trasformare la formattazione di più grafici simili in un'espressione in modo da poter modificare una singola sezione del codice per aggiornare tutti i grafici che si assomigliano. Tuttavia, ho difficoltà a implementarlo nel codice. Sto includendo un esempio di lavoro minimo che mostra come vorrei che fosse una trama e come vorrei che fosse il mio codice, memorizzando un pezzo di codice per la formattazione e un codice compatto per ogni trama. Qualche idea su come posso modificarlo per farlo funzionare? Sto lavorando su JMP versione 15.2.
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>
GraficaScriptingRe: Usare le espressioni per il formato del temaCiao,
La gestione delle espressioni è potente e richiede un po' di pratica. Ecco un esempio per iniziare, ma ti consigliamo di leggere cose come Eval(), Expr(), NameExpr(), Substitute(), Substitute Into(), ecc.
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])));
);
Saluti,
Brady
Re: Usare le espressioni per il formato del temaCiò non ha funzionato molto bene a causa del modo in cui le variabili X, Y e Color cambiano sui miei dati, tuttavia sono riuscito a trovare una soluzione più vicina a ciò che volevo utilizzando JSL Quote, Eval Insert, Parse ed 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^
);")));