Der beste Weg, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenAlle,
Ich würde gerne um eine Eingabe bitten, wie man am besten ein Skript für einen GB-Plot mit mehreren Parametern erstellen kann.
Nehmen wir an, ich habe eine Tabelle wie diese:
New Table( "Untitled 140",
Add Rows( 12 ),
New Column( "Category",
Character,
"Nominal",
Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"} )
),
New Column( "Value1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 4, 2, 3, 6, 2, 3, 5, 4, 1, 3, 6] )
),
New Column( "Value2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [6, 3, 5, 2, 8, 6, 5, 2, 6, 3, 5, 4] )
)
)Und ich möchte eine Handlung wie diese schreiben:

wobei das automatisch generierte Skript so aussieht:
;Graph Builder(
Size( 522, 450 ),
Show Control Panel( 0 ),
Variables( X( :Category ), Y( :Value1 ), Y( :Value2, Position( 1 ) ) ),
Elements( Bar( X, Y( 1 ), Y( 2 ), Legend( 4 ), Summary Statistic( "Range" ) ) )
)
mit dem Haken, dass es eine beliebige Anzahl von Y-Spalten gibt und die Namen auch beliebig sind.
Für Diagramme wie das Variabilitätsdiagramm würde ich etwa Folgendes tun:
parameters = {:"Value1"n, :"Value2"n};
yExpr = Expr( Y() );
For Each( {value, index}, parameters, Insert Into( yExpr, Name Expr( value ), 1 ) );
Eval(
Substitute(
Expr(
Variability Chart( placeholder, X( :Category ), Std Dev Chart( 0 ) )
),
Expr( placeholder ), Name Expr( yExpr )
)
);wo ich die Namen der Spalten als Liste erhalte und dann einen Y-Ausdruck konstruiere und ihn dann in das Skript für das Diagramm einfüge. Es würde mir eine Liste von Variabilitätsdiagrammen geben, aber das ist für mich in Ordnung.
Wenn ich im Fall des GB den gleichen Weg einschlagen möchte, muss ich anscheinend zwei Ausdrücke konstruieren:
Y( :Value1 ), Y( :Value2, Position( 1 ) )
Und
Elements( Bar( X, Y( 1 ), Y( 2 ), Legend( 4 ), Summary Statistic( "Range" ) ) )
Das ist im Wesentlichen das gesamte Drehbuch.
Meine Frage: Gibt es eine bessere Möglichkeit, diese beiden Zeilen zusammenzusetzen, als eine Reihe von Ersetzungen mit Ausdrücken vorzunehmen?
Danke!
Verbraucher- und MarktforschungBetreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenHübsch!Vielen Dank, dass Sie diesen Touch hinzugefügt haben.Ich wünschte, ich hätte das selbst versucht!
Betreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnen@pmroz Hier ist der gleiche Code ohne Eval(Parse()).Ich stimme zu, das ist viel sauberer!
Names default to here(1);
dt = New Table( "Test",
Add Rows( 12 ),
New Column( "Category", Character, "Nominal",
Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"} ) ),
New Column( "Value1", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 4, 2, 3, 6, 2, 3, 5, 4, 1, 3, 6] ) ),
New Column( "Value2", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [6, 3, 5, 2, 8, 6, 5, 2, 6, 3, 5, 4] ) ),
New Column( "Value3", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 4, 3, 6, 5, 7, 3, 4, 2, 8, 6, 1] ) )
);
dt_cols = dt << get column references();
remove from(dt_cols, 1); // Remove Category
dts = dt << Stack(invisible,
columns( dt_cols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dts << Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Variables( X( :Category ), Y( :Data ), Overlay( :Label ) ),
Elements( Bar( X, Y, Legend( 7 ) ) )
);
Betreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenVergiss das nicht STAPEL Befehl.Erfordert eval(parse()), aber ansonsten ist es ziemlich sauber.Hier ist ein Beispiel mit drei zu plottenden Spalten.
dt = New Table( "Test",
Add Rows( 12 ),
New Column( "Category",
Character,
"Nominal",
Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"} )
),
New Column( "Value1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 4, 2, 3, 6, 2, 3, 5, 4, 1, 3, 6] )
),
New Column( "Value2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [6, 3, 5, 2, 8, 6, 5, 2, 6, 3, 5, 4] )
),
New Column( "Value3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 4, 3, 6, 5, 7, 3, 4, 2, 8, 6, 1] )
)
);
dt_cols = dt << get column names(string);
removefrom(dt_cols, 1); // Remove Category
// Create the list of columns, like this: ":Value1, :Value2, :Value3"
col_list = ":" || concat items(dt_cols, ", :");
stack_str = evalinsert(
"\[dts = dt << Stack(invisible,
columns( ^col_list^ ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ))]\");
eval(parse(stack_str));
dts << Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Variables( X( :Category ), Y( :Data ), Overlay( :Label ) ),
Elements( Bar( X, Y, Legend( 7 ) ) )
);

Betreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenDabei werden immer noch Schleifen verwendet, um diese Ausdrücke zu erstellen, aber es verkettet Listen von Argumenten, anstatt sie zu ersetzen:
Names default to here(1);
//call another function (f) with the arguments provided in a list (l)
do.call = function({l,f},
Substitute(
Name Expr(l),
Expr({}),
Name Expr(f)
);
);
dt = New Table( "Data",
Add Rows( 12 ),
New Column( "Category", Character, "Nominal",
Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D", "D"} )
),
New Column( "Value1", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 4, 2, 3, 6, 2, 3, 5, 4, 1, 3, 6] )
),
New Column( "Value2", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [6, 3, 5, 2, 8, 6, 5, 2, 6, 3, 5, 4] )
)
);
vars = {:Value1, :Value2};
VarExpr = do.call(
{ X( :Category ) } || transform each({v}, vars, eval expr( Y( Expr( Name Expr( v ) ), Position( 1 ) ) ) ),
expr(Variables())
);
BarExpr = do.call(
{ X } || transform each({v, i}, vars, eval expr( Y( Expr( i ) ) ) ) || { Legend( 4 ), Summary Statistic( "Range" ) },
expr(Bar())
);
Eval( Eval Expr(
dt << Graph Builder(
Size( 522, 450 ),
Show Control Panel( 0 ),
Expr( Name Expr( VarExpr ) ),
Elements( Expr( Name Expr( BarExpr ) ) )
)
) );Betreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenIch habe normalerweise ähnliche Methoden wie Sie verwendet, um solche Diagrammersteller zu erstellen. Das könnte eine gute Lektüre sein Betreff: Können Sie dies konstruieren, ohne Ausdruck als Zeichenfolge zu schreiben?
Betreff: Beste Möglichkeit, ein GraphBuilder-Diagramm mit mehreren Y-Variablen mithilfe von JSL zu zeichnenOk, so habe ich es gelöst, aber gibt es einen einfacheren Weg? Ich kann nicht glauben, dass ich mich auf diese Art von Komplexität einlassen muss, um ein so einfaches Drehbuch zu schreiben ...:
parameters = {:"Value1"n, :"Value2"n};
yExpr = Expr( Y() );
yExprPos = Expr( Y( Position( 1 ) ) );
barExpr = Expr(
Bar( X, Summary Statistic( "Range" ) )
);
yNExpr = Expr( Y() );
variablesExpr = Expr(
Variables( X( :Category ) )
);
For Each( {value, index}, parameters,
Insert Into( yExpr, Name Expr( value ), 1 );
yExprPos = Expr( Y( Position( 1 ) ) );
Insert Into( yExprPos, Name Expr( value ), 1 );
Insert Into( variablesExpr, Name Expr( yExprPos ) );
//This is for Y(1) etc. in Bar()
yNExpr = Expr( Y() );
Insert Into( yNExpr, Name Expr( index ) );
Insert Into( barExpr, Name Expr( yNExpr ), 2 );
);
//Name Expr( yExpr );
Show(Name Expr( variablesExpr ));
Show(Name Expr( barExpr ));
gbExpr = Expr(
Graph Builder( Size( 522, 450 ), Show Control Panel( 0 ), placeholder1, Elements( placeholder2 ) )
);
Eval(
Substitute(
Substitute(
Name Expr(gbExpr),
Expr( placeholder1 ),
Name Expr( variablesExpr )
),
Expr( placeholder2 ),
Name Expr( barExpr )
)
);