Come aggiungere dinamicamente istruzioni di elementi per un grafico utilizzando JSLCiao ragazzi, sono piuttosto nuovo di JMP e JSL, ma ho una certa familiarità con la programmazione. Sto cercando di creare uno script JSL che prenda un elenco di nomi di parametri (che definisco nell'array "PlotVars") e li rappresenti tutti in grafici separati sullo stesso grafico. Voglio che questo script funzioni indipendentemente dal numero di parametri definiti in questo array (nel caso in cui volessi aggiungere o sottrarre parametri per ogni utilizzo). Posso far sì che il mio script produca questo risultato (usando il codice qui sotto), ma tutti i grafici usano di default i punti e vorrei che usassero una linea. La mia idea di come farlo è usare più istruzioni di elemento per ogni posizione. Credo che il problema risieda nella mia seconda riga, dove inizializzo la variabile "var_line". Se la inizializzo come Expr(), produrrà le istruzioni di elemento ma non le eseguirà correttamente. Lo stesso vale se le inizializzo come Parse(). Sono aperto a qualsiasi idea per risolvere questo problema. Sto usando JMP 18.
Modifica (jthi): aggiunta formattazione jsl
var_expr = Expr(
Variables(X(As Column("Start Alignment of " || DataSet_1)))
);
var_line = Expr();//Unable to dymanically add elements to the graph. still unsure why
For(i = 1, i <= N Items(PlotVars), i++,
Insert Into(var_expr, Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_1), )));
Insert Into(
var_expr,
Eval Expr(Y(As Column(PlotVars[Expr(i)] || " of " || DataSet_2), Position(Expr(i)), ))
);
Insert Into(
var_line,
Eval Expr(Elements(Position(1, Expr(i)), Line(X, Y(1), Y(2)), Legend(4)))
);
);
plot = Substitute(
Expr(
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(Size(809, 629), Show Control Panel(0), vvv, yyy)
),
Expr(vvv), Name Expr(var_expr),
Expr(yyy), Name Expr(test)
);
Eval(plot);
<
var_expr = Expr(Variabili(X( come colonna("Inizia allineamento di " || DataSet_1) )));
var_line = Expr();//Impossibile aggiungere dinamicamente elementi al grafico. Non sono ancora sicuro del motivo
per(i=1, i<=N elementi(VariantiPlot),i++,
Inserisci Into(var_expr, Eval Expr(Y( come colonna(PlotVars[expr(i)] || " di " || DataSet_1),)));
Inserisci Into(var_expr, Eval Expr(Y( come colonna(PlotVars[expr(i)] || " di " || DataSet_2), Posizione(expr(i)),)));
Inserisci Into(var_line, Eval Expr(Elements(Position(1,expr(i)),Line(X,Y(1),Y(2)),Legend(4))));
);
trama = Sostituisci(
Espr(
Tabella dati("Confronto di" || DataSet_1 || "con" ||DataSet_2 ) <<
Generatore di grafici (
Dimensioni (809, 629),
Mostra pannello di controllo (0),
ufficio turistico,
aaaa
)),
Espr(vvv), Nome Espr(var_expr),
Espr(aaa), Nome Espr(test)
);
Eval(trama);
>
Automazione e scriptingRe: Come aggiungere dinamicamente istruzioni di elementi per un grafico utilizzando JSLCome vorresti che apparisse il tuo grafico? Come appare lo script quando JMP lo crea? Come si confronta con lo script che crei con JSL?
Data Table("Comparison of" || DataSet_1 || "with" || DataSet_2) <<
Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(
X(As Column("Start Alignment of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_1)),
Y(As Column(PlotVars[1] || " of " || DataSet_2), Position(1)),
Y(As Column(PlotVars[2] || " of " || DataSet_1)),
Y(As Column(PlotVars[2] || " of " || DataSet_2), Position(2))
),
test
)
C'è anche parecchio materiale correlato a questo, ovvero la creazione dinamica di un Graph Builder. Ecco alcune registrazioni dello Scripters Club: JSL in Graph Builder , Rispondi a tutti: Come creare script di contenuti dinamici per Graph Builder.
Re: Come aggiungere dinamicamente istruzioni di elementi per un grafico utilizzando JSLLo script crea i grafici esattamente come li desidero, tranne per il fatto che li crea utilizzando points/smoother nelle istruzioni degli elementi (nota che le variabili vengono rimosse per ridurre la lunghezza dello script). Questo è il codice del grafico dall'output dello script:
Graph Builder(
Size( 809, 629 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements(
Position( 1, 1 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 1 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 2 ) )
),
Elements(
Position( 1, 2 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 3 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 4 ) )
),
Elements(
Position( 1, 3 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 5 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 6 ) )
),
Elements(
Position( 1, 4 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 7 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 8 ) )
),
Elements(
Position( 1, 5 ),
Points( X, Y( 1 ), Y( 2 ), Legend( 9 ) ),
Smoother( X, Y( 1 ), Y( 2 ), Legend( 10 ) )
)
);
E preferirei che utilizzasse Lines:
Graph Builder(
Size( 696, 590 ),
Show Control Panel( 0 ),
Variables(
...
)
),
Elements( Position( 1, 1 ), Line( X, Y( 1 ), Y( 2 ), Legend( 11 ) ) ),
Elements( Position( 1, 2 ), Line( X, Y( 1 ), Y( 2 ), Legend( 12 ) ) ),
Elements( Position( 1, 3 ), Line( X, Y( 1 ), Y( 2 ), Legend( 13 ) ) ),
Elements( Position( 1, 4 ), Line( X, Y( 1 ), Y( 2 ), Legend( 14 ) ) ),
Elements( Position( 1, 5 ), Line( X, Y( 1 ), Y( 2 ), Legend( 15 ) ) )
);
Ogni volta che si prova a usare "Inserisci" nell'istruzione "elementi", viene semplicemente aggiunta un'istruzione "elementi annidati" anziché istruzioni "elementi separati". E il generatore di grafici sembra semplicemente ignorare queste istruzioni "elementi annidati".
Re: Come aggiungere dinamicamente istruzioni di elementi per un grafico utilizzando JSL
Scopri di più...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
plotvars = {"NPN1", "NPN2", "NPN3", "NPN4", "PNP1"};
xcol = "wafer";
gb_expr = Expr(Graph Builder(Size(809, 629), Show Control Panel(0)));
var_expr = EvalExpr(Variables(X(Expr(NameExpr(As Column(dt, xcol))))));
For Each({colname, idx}, plotvars,
Insert Into(var_expr, Eval Expr(Y(Expr(NameExpr(As Column(dt, colname))))));
);
Insert Into(gb_expr, Name Expr(var_expr));
For(idx = 1, idx <= N Items(plotvars), idx++,
elem_expr = Substitute(
Expr(Elements(Position(1, _pos_), Line(X, Y, Legend(_lgnd_)))),
Expr(_pos_), idx,
Expr(_lgnd_), idx
);
Insert Into(gb_expr, Name Expr(elem_expr));
);
// Show(gb_expr);
gb = Eval(EvalExpr((Send(dt, Expr(gb_expr)))));
gb_expr = Graph Builder(
Size(809, 629),
Show Control Panel(0),
Variables(X(:wafer), Y(:NPN1), Y(:NPN2), Y(:NPN3), Y(:NPN4), Y(:PNP1)),
Elements(Position(1, 1), Line(X, Y, Legend(1))),
Elements(Position(1, 2), Line(X, Y, Legend(2))),
Elements(Position(1, 3), Line(X, Y, Legend(3))),
Elements(Position(1, 4), Line(X, Y, Legend(4))),
Elements(Position(1, 5), Line(X, Y, Legend(5)))
);
Re: Come aggiungere dinamicamente istruzioni di elementi per un grafico utilizzando JSLFantastico, questa idea ha funzionato. Dovevo solo inserire il comando Elementi a livello del generatore di grafici, non provare a costruire i comandi Elementi in un'espressione a sé stante.