Come impostare globalmente i livelli in un grafico<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho alcuni script che utilizzo creati da grafici. Spesso questi grafici contengono dati che JMP separa in livelli sebbene per i miei scopi siano effettivamente gli stessi. Ad esempio, il codice seguente riguarda un grafico dei tassi di esclusione medi tra i siti.
Grafico (
X ( : Codice IDENT ) ,
Y ( Significare ( : Tasso di esclusione )) ,
Aggiungi barre di errore alla media ( Nome ( "Intervallo di confidenza (raggruppato)" )( 0,95 )) ,
Asse di sovrapposizione << {{ Formato ( "Dic fisso" , 12 , 3 ) , minimo ( 0,935 ) , Massimo ( 0,9975 ) ,
Inc ( 0,005 ) , Zecche minori ( 1 )}} ,
Asse dello stack sovrapposto << {{ Formato ( "Dic fisso" , 12 , 0 ) , minimo ( - 1.5 ) , Massimo ( 8.5 ) , Inc ( 1 ) ,
Zecche minori ( 1 )}} ,
Livello [ 1 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 2 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 3 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 4 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 5 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 6 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Livello [ 7 ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
Y [ 1 ] << Grafico dei punti ( 1 ) ,
Invia a rapporto (
Spedizione ({} , "102" , ScaleBox , { Formato ( "Per cento" , 6 , 0 ) , Mostra griglia principale ( 1 )}) ,
Spedizione ({} , "" , AxisBox ( 2 ) , { Aggiungi etichetta asse ( "Media (tasso di esclusione)" )}) ,
Spedizione ({} , "Media (tasso di esclusione)" , TextEditBox , { Imposta la dimensione del carattere ( 20 )}) ,
Spedizione (
{} ,
"Grafico grafico" ,
FrameBox ,
{ Dimensione della cornice ( 704 , 536 ) , Dimensione del contrassegno ( 6 )}
)
)
)
Quando è stato creato lo script per il report precedente, c'erano sette siti, ma ora ce ne sono dieci, quindi gli ultimi tre grafici utilizzano le impostazioni predefinite. C'è un modo per impostare questi livelli a livello globale anziché individualmente per momenti come questo in cui il numero di livelli è cambiato?
Ri: Come impostare globalmente i livelli in un graficoQuindi, ora sono in un altro ciclo di reporting e ho trovato questo thread dell'anno scorso. ho provato pmroz Il suggerimento di ieri e ha funzionato benissimo finché non ha smesso di farlo. La prima volta che ho usato la tecnica presentata da pmroz ha funzionato perfettamente. Per ciascun livello nel set di dati, è stato applicato il colore e il tipo di indicatore corretti a ciascun punto del grafico. Quando ho tentato di utilizzare la tecnica in un altro script di tabelle dati, non ha funzionato; lo script è stato eseguito senza che venissero generati errori, ma sono stati utilizzati i colori e i marcatori predefiniti per JMP invece di quelli definiti nello script. È interessante notare che ora anche il primo script che ho modificato utilizza le impostazioni predefinite di JMP invece di quelle che definisco nello script.
Ecco il codice:
Names Default To Here(1);
Delete Symbols();
dt = Current Data Table();
UniqueValueList = Function({inList},
{Default Local},
tmp = [=> 0];
Insert Into(tmp, inList);
tmp << Get Keys;
);
identCodes = :IDENT Code << Get Values;
uniqueCodes = UniqueValueList(identCodes);
nCrossings = NItems(uniqueCodes);
dt << Chart(
X(:IDENT Code),
Y(Mean(:Read Rate)),
Add Error Bars to Mean(Name("Confidence Interval (pooled)")(0.95)),
Overlay Axis << {{Format("Fixed Dec", 12, 2), Min(0.77), Max(1.05), Inc(0.02),
Minor Ticks(1)}},
Overlay Stack Axis << {{Min(-10)}},
For(i = 1, i <= nCrossings, i++,
Level[i] << {Colors(-4221340), Markers(29)}
),
Y[1] << Point Chart(1),
SendToReport(
Dispatch(
{},
"102",
ScaleBox,
{Format("Percent", 6, 0), Minor Ticks(1), Show Major Grid(1),
Show Minor Grid(0)}
),
Dispatch({}, "", AxisBox(2), {Add Axis Label("Mean(Read Rate)")}),
Dispatch({}, "Mean(Read Rate)", TextEditBox, {Set Font Size(20)}),
Dispatch(
{},
"Chart Graph",
FrameBox,
{Frame Size(1056, 464), Marker Size(6)}
)
)
)In base a ciò che ho potuto vedere dal debugger JSL, nIncroci è impostato correttamente, ma sembra che il ciclo For nell'istruzione Chart venga ignorato. Sfortunatamente, scorrere il codice non aiuta poiché Chart è una singola istruzione, quindi il debugger non scorre il suo codice.
Che cosa sto facendo di sbagliato?
Ri: Come impostare globalmente i livelli in un graficoSembra che potrebbe essere quello che sto cercando. Mi chiedevo se potevo inserire un ciclo For nel codice del grafico, ma non sapevo che avrei potuto creare funzioni definite dall'utente in JSL o che in questo caso ne avrei avuto bisogno. Proverò la tua soluzione.
Ri: Come impostare globalmente i livelli in un graficoPuoi inserire un loop direttamente nel codice del grafico.
dt = Nuova tabella ( "Esempio" , Aggiungi righe ( 8 ) ,
Nuova colonna ( "Codice IDENT" , Carattere , "Nominale" ,
Imposta valori ( { "AA" , "AA" , "AA" , "BB" , "BB" , "CC" , "CC" , "CC" } ) ) ,
Nuova colonna ( "Tasso di esclusione" , Numerico , "Continuo" , Formato ( "Migliore" , 12 ) ,
Imposta valori ( [ 0,05 , 0,07 , 0,08 , 0,5 , 0,6 , 0.4 , 0,3 , 0,2 ] ) )
) ;
codici_ident = dt : Codice IDENT << ottenere valori ;
codici_unici = ottieni_valori_unici ( codici_ident ) ;
codici = nitems ( codici_unici ) ;
dt << Grafico (
X ( : Codice IDENT ) ,
Y ( Significare ( : Tasso di esclusione )) ,
Aggiungi barre di errore alla media ( Nome ( "Intervallo di confidenza (raggruppato)" )( 0,95 )) ,
Asse di sovrapposizione << {{ Formato ( "Dic fisso" , 12 , 3 ) , minimo ( 0,935 ) , Massimo ( 0,9975 ) ,
Inc ( 0,005 ) , Zecche minori ( 1 )}} ,
Asse dello stack sovrapposto << {{ Formato ( "Dic fisso" , 12 , 0 ) , minimo ( - 1.5 ) , Massimo ( 8.5 ) , Inc ( 1 ) ,
Zecche minori ( 1 )}} ,
// Assegna a ogni livello lo stesso colore e indicatore
per ( io = 1 , io <= codici , io ++,
livello [ io ] << { Colori ( - 4221340 ) , Marcatori ( 29 )} ,
) ,
Y [ 1 ] << Grafico dei punti ( 1 ) ,
Invia a rapporto (
Spedizione ({} , "102" , ScaleBox , { Formato ( "Per cento" , 6 , 0 ) , Mostra griglia principale ( 1 )}) ,
Spedizione ({} , "" , AxisBox ( 2 ) , { Aggiungi etichetta asse ( "Media (tasso di esclusione)" )}) ,
Spedizione ({} , "Media (tasso di esclusione)" , TextEditBox , { Imposta la dimensione del carattere ( 20 )}) ,
Spedizione (
{} ,
"Grafico grafico" ,
FrameBox ,
{ Dimensione della cornice ( 704 , 536 ) , Dimensione del contrassegno ( 6 )}
)
)
)
Ecco il codice per la funzione get_unique_values:
Ottieni_valori_unici = Funzione ( { in_list } ,
{ Locale predefinito } ,
tmp = [ => 0 ] ;
Inserire ( tmp , in_list ) ;
tmp << prendi le chiavi ;
) ;
Ri: Come impostare globalmente i livelli in un graficoGrazie, ma non è questo che intendo per globalmente. Non sono interessato a costringere JMP a creare tutti i grafici allo stesso modo. Ho script per set di dati specifici in un progetto in corso in cui il numero di livelli può cambiare da un periodo di reporting all'altro. Il modo in cui JMP genera lo script, le impostazioni per i livelli sono esplicite, quindi voglio sapere se esiste un modo per impostare i livelli a livello globale all'interno di un grafico . Ho uno script simile per un set di dati con 46 livelli e lo script ha generato 46 righe di parametri di livello nonostante ogni livello abbia le stesse identiche impostazioni.
Sembra che JMP presupponga che i livelli siano sempre espliciti e che l'utente desideri che siano sempre rappresentati in modo diverso nel grafico. Ci sono casi in cui ciò è vero, ma ciò che viene considerato livello in questo grafico sono le categorie sull'asse x.
Ri: Come impostare globalmente i livelli in un graficoÈ possibile impostare le impostazioni predefinite nelle Preferenze:
File==>Preferenze==>Grafici
Qui è possibile specificare il marcatore predefinito e il set di colori

Se questo non fa quello che desideri, il tuo script potrebbe essere facilmente modificato per verificare il numero di livelli trovati e per generare il codice come richiesto.