Verwenden von Ausdrücken für das DesignformatIch versuche, die Formatierung mehrerer ähnlicher Plots zu einem Ausdruck zu machen, damit ich einen einzelnen Abschnitt des Codes ändern kann, um alle gleich aussehenden Plots zu aktualisieren. Es fällt mir jedoch schwer, es in Code zu implementieren. Ich füge ein minimales Arbeitsbeispiel bei, das zeigt, wie ein Plot aussehen soll und wie mein Code aussehen soll, indem ich einen Code für die Formatierung und einen kompakten Code für jeden Plot speichere. Irgendeine Idee, wie ich das ändern kann, damit es funktioniert? Ich arbeite an JMP-Version 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>
GrafikSkriptingBetreff: Ausdrücke für Theme-Format verwendenHallo,
Die Ausdrucksbehandlung ist leistungsstark und erfordert ein wenig Übung. Hier ist ein Beispiel für den Einstieg, aber Sie sollten sich über Dinge wie Eval(), Ausdr(), NameAusdr(), Substitute(), Substitute Into() usw. informieren.
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])));
);
Prost,
Brady
Betreff: Ausdrücke für Theme-Format verwendenDas hat nicht sehr gut funktioniert, weil sich die Variablen X, Y und Color in meinen Daten ändern, aber ich habe es geschafft, mit JSL Quote, Eval Insert, Parse und Eval eine nähere Lösung für das zu finden, was ich wollte:
// 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^
);")));