Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Lo script di esempio seguente fa ciò di cui ho bisogno per un numero limitato di parametri che voglio tracciare sull'asse Y.
Come automatizzarlo per un elenco fornito a Y dall'alto?
(La variabile/colonna X rimane fissa ma il numero di elementi che vanno a Y può cambiare e viene fornito da un altro script)
Names Default To Here (1);
Clear Log ();
dt = open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height),
Y( column(dt, y_values[1]) ),
Y( column(dt, y_values[2]) ),
Y( column(dt, y_values[3]) ),
Y( column(dt, y_values[4]) )
),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 1 ) ) ),
Elements( Position( 1, 2 ), Points( X, Y, Legend( 2 ) ) ),
Elements( Position( 1, 3 ), Points( X, Y, Legend( 3 ) ) ),
Elements( Position( 1, 4 ), Points( X, Y, Legend( 4 ) ) )
);Inoltre, come si gestiscono gli Elements () in questo caso.
Automazione e scriptingfinestreRi: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?@hogi Grazie, temo di aver bisogno di ulteriore mano perché non ho mai utilizzato le funzioni Expr () e Insert NameExpr () in precedenza. Sarebbe utile se potessi fornire un esempio con lo script di esempio che ho aggiunto nel mio OP.
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Questa non è solo un'opzione per costruirlo, ma può dare alcune idee. Cerca anche l'indice di scripting per Variabile ed Elemento per GraphBuilderbox
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);
Modificare:
Un esempio utilizzando Aggiungi variabile()
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
gb = dt << Graph Builder(
// Ignore Platform Preferences(1),
Show control Panel(0),
Variables(X(:height))
);
gb << inval;
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
gb << Add Variable({Expr(Name Expr(As Column(dt, y_col))), Role("Y")})
));
// if you just want points, you shouldn't need this, but smoother idx is 2 instead of 1
/* gb << Remove Element(1, idx, 1);
Eval(EvalExpr(
gb << Add Element(1, Expr(idx), {Type("Points"), X, Y, Legend(Expr(idx))})
));
*/
);
gb << Update window;
gb << Remove Element(1, N Items(y_values), 2); // 1 or 2 for smoother idx, depending on how GB is builtRi: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?@jthi Grazie. Questo funziona per me, ma non posso modificare il titolo del grafico predefinito. Come farlo tramite JSL?
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Dipende da cosa definisci come titolo.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Variables(X(:height), Y(:weight)),
Elements(Points(X, Y), Smoother(X, Y))
);
gb << Title("Test");
E se consideri che sia la casella di modifica del testo sopra il generatore di grafici, modificala manualmente e quindi modifica lo script creato da JMP.
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("asdsad")}))
e puoi ottenere ancora più informazioni se hai JMP17 e usi le proprietà

Quindi qualcosa del genere
Report(gb)[TextEditBox(1)] << Set Text("12313213");
potrebbe funzionare a seconda del rapporto
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?@jthi Grazie. Per il caso semplice che mostri, so come inserire il titolo del grafico (come mostri), ma come farlo per il caso seguente?
Names Default To Here(1);
dt = Open("$sample_data\Big Class.jmp");
y_values = {"name", "age", "sex", "weight"};
variables_expr = Expr(Variables(X(:height)));
For Each({y_col}, y_values,
temp_expr = Expr(Y());
Insert Into(temp_expr, Name Expr(AsColumn(dt, y_col)));
Insert Into(variables_expr, Name Expr(temp_expr));
);
gb_expr = Expr(Graph Builder(
Show Control Panel(0)
));
Insert Into(gb_expr, Name Expr(variables_expr));
For Each({y_col, idx}, y_values,
Eval(EvalExpr(
Insert Into(gb_expr,
Name Expr(Elements(Position(1, Expr(idx)), Points(X, Y, Legend(Expr(idx)))))
)
));
);
Show(Name Expr(gb_expr));
Eval(gb_expr);Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Ottieni riferimento al generatore di grafici ed entrambe queste idee dovrebbero funzionare
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?@jthi Grazie ma non vedo Get Reference () in Scripting Index (sono su JMP 16.2.0). Intendi ottenere il nome della finestra della finestra del generatore di grafici?
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Current Report()[TextEditBox( 1 )] << set text( "NewTitle" );
Questo funziona per me.
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Suggerirei di ottenere il riferimento quando valuti l'espressione che crea il grafico. Penso
gb = Eval(gb_expr);
dovrebbe funzionare. Inoltre potrebbe essere una buona idea assicurarsi che il Costruttore di grafici venga creato utilizzando dt se esiste la possibilità che siano aperte più tabelle. Anche se non sono sicuro di quale sarebbe la sintassi più semplice per farlo in questo caso senza eseguire test
Ri: Come passare la variabile Y nel Generatore di grafici da un elenco in JSL?Potresti generare i simboli var e gb per le espressioni
Var= Expr(variables(x(:height)))
gb =Expr(Graph Builder())
E poi usa Inserire in un Per loop per riempire var con Ys , quindi inserire NomeEspr(var) in GB e poi usarne un altro Per loop per aggiungere le espressioni Elements.