Come definire i limiti delle specifiche per categoria di dati nel grafico della variabilitàCIAO,
Come posso disegnare i limiti di specifica (linea rossa) per categoria di dati nel grafico di variabilità come nell'esempio seguente? La linea rossa è stata realizzata manualmente in pptx.
Allega i dati del file jmp per riferimento. Grazie per la tua risposta. Grazie.

Automazione e scriptingAnalisi e modellazione dei dati di baseFinestreRe: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàLa variazione dei limiti delle specifiche in base alla categoria di dati nel grafico della variabilità fornisce qualche idea?
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao jthi,
Ho controllato e seguito i passaggi, ma non ha funzionato, anche se ho utilizzato direttamente il file allegato e lo script.
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàUtilizzando i tuoi dati (+ aggiungendo limiti) e apportando una piccola correzione allo script da quel thread

Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao jthi,
Hai effettivamente disegnato il grafico che volevo, ma non so ancora come modificare lo script. Comunque, grazie per la tua risposta
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàNames Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao,
Grazie per il tuo script, ha funzionato correttamente.
Per quanto riguarda l'impostazione del limite di seguito, se ho fino a 100 dati e aggiungo solo la riga del limite sulla "Fase" dedicata, ci sono soluzioni per ottimizzare lo script seguente? Grazie
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous, Values([10, 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20, 20]));
dt << New Column("Target", Numeric, Continuous, Values([20, 20, 20, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 40, 40, 40]));
dt << New Column("USL", Numeric, Continuous, Values([30, 30, 30, 30, 30, 30, 30, 30, 30, 50, 50, 50, 50, 50, 50, 50, 50, 50]));Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàPotresti creare una tabella dei limiti delle specifiche o, se non hai troppi parametri, un array associativo per quello
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => 50, "Target" => 40]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
Oppure utilizzando la tabella delle specifiche
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
dt_specs = New Table("Specs",
Add Rows(2),
Compress File When Saved(1),
New Column("Variable", Character, "Nominal", Set Values({"L1", "L2"})),
New Column("LSL", Numeric, "Continuous", Format("Best", 12), Set Values([10, 30])),
New Column("Target", Numeric, "Continuous", Format("Best", 12), Set Values([20, 40])),
New Column("USL", Numeric, "Continuous", Format("Best", 12), Set Values([30, 50]))
);
dt << Update(
With(dt_specs),
Match Columns(:Phase = :Variable)
);
Close(dt_specs, no save);Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao,
Ha funzionato quando ho usato il metodo 1.
Supponendo che io voglia che L2 non abbia USL/LSL, come posso ottimizzarlo?
Ho provato a impostare il valore = 0, ma viene visualizzata una linea rossa nella posizione Y-zero.
I put //"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40], it's not work.
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 0, "USL" => 0, //"Target" => 40]
];
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàSe non lo desideri, imposterei il valore come mancante e penso che dovrebbe funzionare con lo script.
Vedi altro...
Names Default To Here(1);
dt1 = Open("$DOWNLOADS/sample data.jmp");
dt = dt1 << Stack( // stack to get proper data format
columns(:A10, :A20, :A30),
Source Label Column("SampleGroup"),
Output Table("Stack")
);
aa_specs = [
"L1" => ["LSL" => 10, "USL" => 30, "Target" => 20],
"L2" => ["LSL" => 30, "USL" => ., "Target" => .]
];
// Add limits as they were not provided
dt << New Column("LSL", Numeric, Continuous);
dt << New Column("Target", Numeric, Continuous);
dt << New Column("USL", Numeric, Continuous);
For Each Row(dt,
:LSL = aa_specs[:Phase]["LSL"];
:USL = aa_specs[:Phase]["USL"];
:Target = aa_specs[:Phase]["Target"];
);
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxis
Potresti anche modificare leggermente lo script e assicurarti che ignori quelli che hanno valori mancanti, ma potrebbe non essere necessario
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao Jarmo,
Ho provato a passare da Line a Graph Box, ma non funziona con lo script modificato di seguito. Come potrei modificarlo?
Eval(EvalExpr(
fb << Add Graphics Script(
Fill Color("Green");
Transparency( 0.3 );
Graph Box(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Graph Box(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàC'è un motivo specifico per provare a modificare Graph Box all'interno del Graphic Script?
Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàCiao Jarmo,
Quando ci sono più set di fasi/gruppi dell'asse X, questa linea potrebbe oscurare i punti dati del boxplot. Vorrei usare invece la seguente immagine.

Re: Come definire i limiti delle specifiche per categoria di dati nel grafico di variabilitàQuindi potresti usare Rect invece di Line(), non c'è bisogno di graph box (graph box è fondamentalmente già lì). Dovrai gestire i valori mancanti in qualche modo se scegli questa opzione, poiché i punti mancanti causeranno problemi con Rect()

Eval(EvalExpr(
fb << Add Graphics Script(
Transparency(0.2);
Pen Color("Green");
Fill Color("Green");
Rect(Expr(lslstart), Expr(uslend), 1);
);
));Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCiao Jarmo,
Grazie per la tua pronta risposta.
Un'altra domanda per aggiungere un valore aggiuntivo sull'asse X.
Quando ho inserito un altro valore X (SampleA), ho modificato lo script sottostante. Ma il risultato della linea limite è errato, come posso modificarlo?
var = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "SampleGroup", "SampleA"];
xend = xidx + curcount;
lslstart = Eval List({xidx, curlsl});
lslend = Eval List({xend, curlsl});
uslstart = Eval List({xidx, curusl});
uslend = Eval List({xend, curusl});
targetstart = Eval List({xidx, curtarget});
targetend = Eval List({xend, curtarget});
xidx = xend;
Eval(EvalExpr(
fb << Add Graphics Script(
Pen Color("Red");
Pen Size(1);
Line(Expr(lslstart), Expr(lslend)); // {x1, y1}, {x2, y2}
Line(Expr(uslstart), Expr(uslend)); // {x1, y1}, {x2, y2}
Pen Color("Blue");
Line(Expr(targetstart), Expr(targetend)); // {x1, y1}, {x2, y2}
);
));
);
fb << Y Axis(Max(1.1*Max(Col Max(Column(dt, "Data")), Col Max(Column(dt_summary, "USL"))))); // adjust yaxisRe: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCome vengono formati i limiti (in base a quali gruppi)? Cosa c'è che non va? Molto probabilmente dovrai modificare il valore di Riepilogo, l'eventuale Riepilogo e il valore di Curcount.
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàSì, l'ho notato, quindi ho modificato lo script per riassumere e correggere il valore. Tuttavia, la linea limite non può coprire completamente tutte le condizioni relative alla fase. I limiti si basano ancora sulla "fase". (Si prega di ignorare il fatto che non esiste un nuovo asse X per SampleA)

Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàPotresti creare una nuova colonna nella tabella principale, ad esempio concatenando SampleGroup e SampleA. Quindi usala per le categorie N in Riepilogo e per curcount per ottenere i conteggi corretti.
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàvar = dt << Variability Chart(Y(:Data), X(:Phase, :SampleGroup, :SampleA));
dt_summary = dt << Summary(
Group(:Phase),
Max(:LSL),
Mean(:Target),
Min(:USL),
N Categories(:SampleGroup, :SampleA),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
dt_summary << Delete Columns("N Rows");
// We need access to the framebox
fb = Report(var)[Outline Box("Variability Chart for Data"), Frame Box(1)];
//Get phases count (this was missing)
Summarize(dt, phases = By(:Phase));
// Using graphic scripts most likely easiest option
xidx = 0;
For(i = 1, i <= N Items(phases), i++,
curphase = dt_summary[i, "Phase"];
curlsl = dt_summary[i, "LSL"];
curusl = dt_summary[i, "USL"];
curtarget = dt_summary[i, "Target"];
curcount = dt_summary[i, "N Rows"];
Ho modificato lo script sopra, ma la linea limite non viene generata. Come posso modificarla?
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCosa c'è che non va (non ho i tuoi dati quindi non posso controllare)?
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàPer i dati di prova e lo script, fare riferimento agli allegati.
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCome ho detto prima, l'opzione più semplice è creare una nuova colonna di raggruppamento e usarla nella tabella Riepilogo. Potrebbe anche essere sufficiente ottenere la somma delle n categorie su più gruppi.
curcount = Sum(dt_summary[i, {"Leg", "Layer"}]);Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCiao,
Se stai cercando una soluzione che non richieda script e sei a tuo agio con Graph Builder, sappi che gestisce effettivamente limiti di specifiche multilivello per categoria: assicurati solo che i tuoi limiti di specifiche siano strutturati di conseguenza (ad esempio tramite la proprietà della colonna).
Se si desidera espressamente utilizzare il Grafico della Variabilità, questo comportamento non è integrato nel core di JMP, ma è supportato da YieldOptiX, un plugin sviluppato per l'analisi dei dati di test. Aggiunge il supporto per i limiti di specifica basati su categoria direttamente nel Grafico della Variabilità.
Entrambe le opzioni (Graph Builder o Variability Chart con limiti raggruppati) sono supportate a seconda dell'interfaccia preferita, ovvero di quella più adatta al tuo processo.
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàCiao Jarmo
Quando inserisco più dati, il limite di specifica non segue il contenuto dello script. Come posso modificare lo script?
Re: Come definire i limiti di specifica per categoria di dati nel grafico di variabilitàDevi calcolare il numero di gruppi in modo diverso. Un'opzione piuttosto semplice potrebbe essere quella di aggiungere una nuova colonna al tuo dt che combini leg e layer.
dt << new column("LEGLAYER", Character, Nominal, Formula(:Leg ||:Layer));
quindi usalo nel riepilogo
dt_summary = dt << Summary(
Group(:SampleGroup),
Max(:LSL),
//Mean(:Target),
Min(:USL),
N Categories(:LEGLAYER),
Freq("None"),
Weight("None"),
statistics column name format("column"),
Link to original data table(0)
);
e prendi il conto da quello
curcount = Sum(dt_summary[i, {"LEGLAYER"}]);

Re: Come definire i limiti delle specifiche per categoria di dati nel grafico della variabilitàHo utilizzato lo script che hai condiviso, ma il limite delle specifiche non viene visualizzato.
Per favore, aiutatemi a controllare lo script come allegato. Come posso modificarlo?