JSL: come scorrere le colonne, generare un report del Generatore di grafici e salvarle come file JPGCiao,
Ho un set di dati contenente 41 variabili. Devo tracciare ciascuno dei primi 40 rispetto all'ultimo, ad esempio, per creare 40 box plot o jitter plot.
Creare una bella trama completa di tutte le funzionalità tramite il menu Crea grafico è facile e persino divertente. So come salvare lo script di ciò che ho fatto, ma quello che non so è come scrivere un ciclo che prenderà ogni iterazione di un'altra variabile e la sostituirà nel mio codice grafico originale. In altre parole, se ho 20 righe di codice, voglio un ciclo che esegua sempre lo stesso codice e cambi solo il punto in cui definisco la variabile dipendente. Inoltre, ho bisogno di un modo gradevole per mostrare i risultati (40 finestre non sono pratiche), quindi ho pensato di salvarle ciascuna come JPG prima di passare all'iterazione successiva. Questo è possibile con JMP?
Grazie !
Ri: Ciclo JSLNell'esempio seguente viene illustrato come ottenere un elenco di nomi di colonne come stringhe di caratteri.Il ciclo For genera un costruttore di grafici invisibile che inizia con la seconda colonna nell'elenco perché la prima viene utilizzata come X.(Il post originale dovrebbe modificarli in modo che inizino con la prima colonna dell'elenco e si interrompano prima dell'ultima colonna dell'elenco.) Ogni report del Costruttore di grafici viene salvato come file JPG in cui il nome della colonna è incluso nel nome del file.Infine, la tabella dati e i report invisibili vengono chiusi.
/* Open a sample data table */
dt = Open( "$SAMPLE_DATA\Fitness.jmp" );
/* Obtain a list of numeric/continuous column names as strings */
colList = dt << Get Column Names( Continuous, String );
/* Loop through the list to generate the desired Graph Builder
and save the report as a JPEG file */
For( i = 2, i <= Nitems( colList ), i++,
gb = dt << Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Variables(
X( :Age ),
Y( Column( dt, colList[i] ) ),
Color( :Age )
),
Elements(
Points(
X,
Y,
Legend( 3 ),
Summary Statistic( "Mean" ),
Error Bars( "Confidence Interval" )
)
),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Marker Size( 5 )}
)
),
Invisible
);
gb << Save Picture( "E:\Trash\Graph Builder_" || colList[i] ||".jpg", JPEG );
);
/* Close table and all invisible reports */
Close( dt, No Save );
Spero che aiuti!
Ciclo JSLCIAO,
grazie per il tuo tentativo di aiutare. Sfortunatamente, non ho ancora abbastanza familiarità con JSL (quando avrò una pausa dal lavoro lo approfondirò), e ho avuto problemi con le parentesi e tutto il resto, quindi il tuo suggerimento non ha funzionato, probabilmente aveva un cartello nel posto sbagliato.
Il mio codice originale è:
Graph Builder(
Size( 880, 750 ),
Show Control Panel( 0 ),
Variables(
X( :Cutoff, Size( 0, 21 ) ),
Y( :S1, Size( 0, 22 ) ),
Color( :Cutoff )
),
Elements(
Points( X, Y, Color, Legend( 1 ), Jitter( 1 ) ),
Line(
X,
Y,
Color,
Legend( 2 ),
Row order( 0 ),
Error Bars( "Confidence Interval" ),
Summary Statistic( "Mean" )
)
),
SendToReport( Dispatch( {}, "Graph Builder", FrameBox, {Marker Size( 5 )} ) )
);
Potete per favore aiutarmi ad avvolgerlo con il cappio?
Saluti!
Ciclo JSLSalve!Quello che vuoi fare è abbastanza semplice.
Innanzitutto, nel tuo script dovrai definire la tabella dati corrente:
cd = Current Data Table();
Ora, ottieni l'elenco dei nomi delle colonne:
column_names = cd << Get Column Names;
Ora, ci sono diversi modi per eseguire la parte successiva, ma trovo che questo sia il più semplice.Ti consigliamo di iniziare una stringa di testo che alla fine analizzeremo e valuteremo.La prima parte è creare una nuova finestra.
nw = "New Window(\"Graphs\",
randomname = V List Box(";
Ora possiamo scrivere il loop che inserirà il tuo codice personalizzato con una piccola modifica.Presumo che tu sappia come utilizzare un ciclo "for" di JMP: ripeterò semplicemente tutte le colonne della tabella tranne l'ultima.
for(i=1,i<=length(column_names)-1,i++,
nw = nw || "PUT YOUR CUSTOM CODE HERE*" || ",";
);
*Nel codice personalizzato, in cui definisci la variabile dipendente, rimuovila e sostituiscila con
:Name(\"" || column_name || "\")
Ciò che farà è incollare il nome del testo di ciascuna variabile dipendente che hai all'interno dello script personalizzato che hai scritto.
Infine, dobbiamo completare la nuova finestra che abbiamo iniziato in precedenza: la prima riga termina di scrivere il codice per creare la nuova finestra, la seconda riga prima analizza il testo per renderlo codice e poi valuta il codice contenuto in nw.
nw = nw || "));";
eval(parse(nw));
Dovrebbe bastare: fammi sapere se hai domande o hai bisogno di aiuto specifico!