Ciao,
Ho una domanda riguardante una funzione per creare grafici multipli. Sto creando una funzione che richiama il generatore di grafici con determinate impostazioni per creare grafici multipli. I grafici sono simili, ma utilizzano un numero diverso di colonne e la formattazione è leggermente diversa. L'unico input per la funzione è la tabella dati con i dati.
La funzione crea i grafici e li salvo tutti come variabili, per poi aggiungerli a un elenco. In seguito, vorrei richiamare ciascuna variabile (grafico) dall'elenco e inserirla in finestre diverse. Tuttavia, questo non funziona e ottengo uno spazio vuoto quando richiamo l'elenco con un indice.
Ho provato a trasformare i grafici in report, ma ciò li rende non interattivi.
Se chiamo la funzione nel punto in cui voglio posizionare il grafico, posizionerà tutti e tre i grafici contemporaneamente anziché uno alla volta.
Qualsiasi aiuto su come orientarsi in questo argomento sarà apprezzato.
Dovresti essere in grado di chiamare la funzione in cui desideri avere i grafici
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
plots = {};
nw = new window("",
V List Box(
Insert Into(plots, create_plot(dt, "height")),
Insert Into(plots, create_plot(dt, "weight"))
)
);
Se non hai bisogno dell'elenco per la raccolta di riferimento, puoi semplicemente eliminarlo
nw = new window("",
V List Box(
gb_height = create_plot(dt, "height"),
gb_weight = create_plot(dt, "weight")
)
);
o semplicemente
nw = new window("",
V List Box(
create_plot(dt, "height"),
create_plot(dt, "weight")
)
);
e l'idea sarebbe simile per più finestre
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
nw = new window("",
create_plot(dt, "height")
);
nw = new window("",
create_plot(dt, "weight")
);
Oppure a volte potresti non aver bisogno della nuova finestra
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
create_plot = function({dt, colname}, {Default Local},
gb = dt << Graph Builder(
Variables(X(:age), Y(Eval(colname)), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
return(gb);
);
gb1 = create_plot(dt, "height");
gb2 = create_plot(dt, "weight");
Grazie Jarmo.
Alla fine ho fatto qualcosa di simile. Ho creato una clausola Match e ho semplicemente potuto scegliere quale dei tre tipi di grafici creare, quindi ho chiamato la funzione tutte le volte che mi serviva, scegliendo di generare i singoli grafici. Credo che sia equivalente a quello che hai fatto tu alla fine. Volevo che tutti e tre i grafici fossero creati nella stessa funzione, poiché presentavano piccole differenze nella formattazione, più che una semplice sostituzione del nome della colonna come nel tuo esempio, e non volevo creare 3 funzioni diverse per ogni tipo, che avrebbero funzionato altrettanto bene.
Oltre alla domanda "come creare i grafici?", bisognerebbe anche considerare "come organizzare i grafici?".
Forse sarebbe meglio usare una singola finestra e memorizzare i grafici come schede ?