Ri: Come aggiungere una linea orizzontale dinamica dall'asse y condiviso tra il grafico di variabilità diviso da due condizioni tramite JSLRi: Come aggiungere una linea orizzontale dinamica dall'asse y condiviso tra il grafico di variabilità diviso da due condizioni tramite JSLLa cosa da tenere a mente sul VariabilityPlot è che ogni gruppo meno significativo ha una larghezza di esattamente 1 sull'asse x nascosto, a partire da zero.Questo rende abbastanza semplice aggiungere le righe pertinenti.
L'unica piccola complicazione è capire quanti sottogruppi contiene ciascuno dei gruppi più grandi, ma la funzione Riepilogo della tabella dati può essere d'aiuto.
Ecco uno script di esempio che fa quello che chiedi:

names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
rpt = dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" ),
);
//find groupings:
rows = dt << Get Rows Where( :NAME("D/P") == "Driver" & :Protection == "manual belts" );
subt = dt << Subset( Rows( rows ), Columns( :Make, :Model, :Wt ), Not Linked, Private );
sumt = subt << Summary( Group( :Make, Model ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( subt, No Save );
subt = sumt << Summary( Group( :Make ), Mean( :Wt ), Statistics Column Name Format( "Column" ), Link to Original Data Table( 0 ), Private );
Close( sumt, No Save );
category number = [=>];
category average = [=>];
For Each Row( subt,
category number[:Make] = :N Rows; // each least-significant category in a VariabilityPlot is exactly X=1 width on the hidden x-axis, starting at zero
category average[:Make] = :Wt
);
Close( subt, No Save );
tree = rpt << Report;
Eval( Eval Expr(
tree[FrameBox( 1 )] << Add Graphics Script(
Local( {values = Expr( category average ), numbers = Expr( category number ), i, items, sum = 0},
items = categories << Get Keys;
Pen Size( 2 );
Pen Color( "Blue" );
Summation( i = 1, N Items( items ),
Line( Eval List( {sum, values[items[i]]} ), Eval List( {sum += categories[items[i]], values[items[i]]} ) );
0
)
)
)
) )Ri: Come aggiungere una linea orizzontale dinamica dall'asse y condiviso tra il grafico di variabilità diviso da due condizioni tramite JSLCIAO,
Prima di tutto, grazie mille per le informazioni e per il codice, sto cercando di andare riga per riga e imparare come l'hai scritto. Quando ho eseguito lo script, ricevo un errore per la riga "cagegories << Get Keys" che sembra attraverso il registro della console. Sapresti come risolvere questo problema o se dovrebbe essere un'altra variabile?


Grazie, apprezzo l'aiuto!
Ri: Come aggiungere una linea orizzontale dinamica dall'asse y condiviso tra il grafico di variabilità diviso per due condizioni tramite JSLMi dispiace, ho cambiato solo parzialmente i nomi delle variabili.Il nome categorie avrebbe dovuto essere numeri .Ho modificato rispondendo sopra.
Come aggiungere una linea orizzontale dinamica tramite l'asse y condiviso nel grafico della variabilità diviso in due condizioni tramite JSLCiao a tutti,
Ho creato un grafico della variabilità diviso in due condizioni, così facendo jmp crea un grafico con un asse y condiviso. Il mio problema con questo asse y condiviso è che quando aggiungo una linea orizzontale, la aggiunge su ciascuna divisione x anziché poter avere una linea orizzontale diversa per gruppo. Mi chiedevo se questo fosse possibile con un possibile ciclo per ogni come valore che voglio che la linea orizzontale sia un valore dalla tabella dati originale.
names default to here(1);
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Cars.jmp" );
dt << Variability Chart(
Y( :Head IC),
X( :Make, :Model ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Show Range Bars( 0 ),
Show Cell Means( 0 ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
By( :NAME("D/P"), :Protection )
);
Questo è idealmente come vorrei che fosse in base al valore nella tabella.
Il mio attuale tentativo in questo senso è:
for each( {bygroup, i}, value,
report(dt[i])[AxisBox(1)] << add ref line(value[i], "Dotted","Black", Char(value[i]))Per il bene di poter utilizzare questo set di dati, se potessi utilizzare la colonna ":Wt" per mostrarlo, te ne sarei davvero grato. Grazie!
Combinazione e pulizia dei datiIngegneria della qualità e dei processi