L'obiettivo qui è salvare una serie di carte di controllo (o qualsiasi altro rapporto) come file grafico che può essere utilizzato altrove.
Ad esempio, ho una presentazione di PowerPoint con 10 grafici di controllo. Ogni lunedì devo aggiornare le carte di controllo nella presentazione. Potrei creare i grafici in JMP e poi copiarli e incollarli nel mazzo ogni settimana, oppure potrei sfruttare la funzione Inserisci e collega disponibile nella maggior parte dei prodotti MS.

Per fare questo potrei creare il grafico di controllo, salvarlo come figure1.png, quindi aprire PowerPoint dove inserirei l'immagine usando l'opzione "inserisci e collega" (freccia in basso sul pulsante Inserisci). Lo farei per ciascuna delle 10 diapositive. La prossima settimana creerò ogni carta di controllo e la salverò in un file grafico (es. figure1.png, figure2.png...). Quindi, quando apro il mazzo di diapositive in PowerPoint, la nuova versione di figure1.png ecc. viene inserita nel mazzo.
Sembra noioso? Sì, sarebbe orribile, sarebbe più semplice salvare tutti e 10 i grafici come file PowerPoint in JMP e copiare e incollare i grafici. Tuttavia! Con un po' di JSL, tutto diventa davvero facile e ti mostrerò come.
Prima di iniziare, diamo un'occhiata a un semplice script per creare un grafico di controllo e capire cosa sta succedendo:
Carta di controllo ( Dimensione del gruppo( 1 ), grafico col ( :Metrica 1, Misura individuale ))
Sbucciamo questo a parte:
Lo strato più esterno è Grafico di controllo() , e all'interno di quello strato ci sono due parti, Dimensione del gruppo(1) , E Grafico Col() .
Ognuno degli elementi ha argomenti, ad esempio Group Size ha un argomento, "1". Chart Col() ha due argomenti. Il primo è un riferimento di colonna e il tipo di grafico di controllo da creare con quella colonna. Concettualmente ci sono livelli di funzioni e un modo per scrivere è costruire la tua "cipolla" dall'interno verso l'esterno.
Ci sono probabilmente 100 e 1 modi per scrivere questo script, e alcuni potrebbero essere più facili e meno prolissi di quello che farò qui. L'approccio che sto usando qui tende a funzionare con quasi tutte le piattaforme in JMP, ma richiede un modo leggermente diverso di pensare allo scripting... lo scripting dall'interno verso l'esterno.
1. lista={}; qui è dove sto fornendo un elenco di nomi di colonne da cui voglio creare grafici di controllo. Un esempio più complesso potrebbe avere una finestra di dialogo utilizzata per generare l'elenco, o forse un filtro logico per selezionare colonne continue da una tabella, ma questo è per un altro post del blog.
2. a=espr(); Qui sto solo prendendo ciascuna delle funzioni utilizzate nella carta di controllo e definendole ma lasciandole vuote.
a=expr(grafico di controllo()); mi dà un posto per mettere argomenti. b=expr(dimensione gruppo(1)); è un elemento in cui inserirò Carta di controllo( ) , E c=expr(grafico col(... sarà anche inserito in "a". IL " espr( ) "La funzione è importante da capire. Qualunque cosa ci sia dentro non viene valutata, non viene "letta" e fatta diventare qualcosa. Ad esempio se Parlare ( "Ciao" ); erano nel tuo script, JMP direbbe "ciao", ma se s=espr( Parlare ( "Ciao" ) ); fossero nel tuo script, non accadrebbe nulla fino a quando non valutassi "s" o esplicitamente scriptato, eval(s). (più precisamente, se "s;" fosse su una riga del tuo codice, JMP lo valuterebbe e direbbe "ciao"). Qui sto usando espr( ) per trattenere le parti che voglio usare in seguito.
3. Inserisci in (c, alist[i],1); Qui, "c" è un argomento non valutato, chartcol (misurazione individuale).Insert into, inserisce la prima cosa nella variabile di lista "alist" nel contenuto di "c". Quindi ora c è chartcol(:Metrica 1, misurazione individuale).
Questo è un buon punto per fare un passo indietro e spiegare da dove proviene la "i" in "alist[i]".
For (i=1, i<=nitems(alist), i++ è l'inizio di un ciclo For Next, o For this set of conditions, continua a farlo fino a quando la condizione non è vera. Quindi, i=1, e mentre i è minore o uguale al numero di cose in "alist", fai la prossima cosa. La variabile "i" viene aumentata di uno in ogni ciclo e possiamo usare questa variabile contatore per altre cose nel ciclo. Nel primo ciclo, i=1, quindi lo usiamo per ottenere la prima cosa in "alist" dicendo "alist, subscript, i". Più avanti nello script useremo i nel nome del file che salviamo. Voglio un elenco seriale di nomi di file (figura1, figura2, figura3...) Per ottenere ciò concateno il prefisso con I. Tranne che c'è un problema, non possiamo concatenare un numero, quindi dobbiamo dire " percorso/figura"||char(i)||".png " la i numerica deve essere inserita carattere( ) , quindi come carattere può essere concatenato con altri caratteri. (cose racchiuse tra virgolette.)
4. obj=eval(a); a questo punto della sceneggiatura il grafico di controllo() la funzione è stata impacchettata con tutti gli argomenti di cui ho bisogno ed è tempo di valutarla. Si noti che "obj", una variabile, può essere utilizzata come "handle" per comunicare con il grafico di controllo appena generato.
5. obj< quest'ultimo passaggio salva il contenuto di obj come file di immagine ,png. nota che il nome del file ha un'estensione .png, quindi subito dopo il nome del file, l'argomento successivo è "png". Ciò significa che è possibile salvare un file con estensione .gif ma come file di tipo .png. Consiglio vivamente non mancata corrispondenza dell'estensione e del tipo di file.
6. obj< Questo è solo ripulire. Se si desidera visualizzare i rapporti JMP creati, questi vengono commentati.
7. Il bit finale è ");" questa è la parentesi di chiusura per l'inizio For(. In pratica, quando stai programmando, è una buona idea lasciare un commento alla chiusura del ciclo, qualcosa come "//end of i loop" Questo è particolarmente importante se ti capita di iterare all'interno di altri loop , aiuta a evitare che le cose diventino pazze.
alist={:Metric 1, :Metric 2, :Metric 3};
for(i=1, i<=nitems(alist), i++,
a=expr(control chart());
b=expr(group size(1));
c=expr(chart col(individual measurement));
insert into(c,alist[i],1);
insert into(a,nameexpr(b));
insert into(a,nameexpr(c));
obj=eval(a);
obj<< Save Picture( "/Users/bywing/Byron Wingerd/Examples/example"||char(i)||".png", "png" );<BR /> obj<< Close Window;
);