Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut,
Comment puis-je tracer les limites de spécification (ligne rouge) par catégorie de données dans le graphique de variabilité, comme dans l'exemple ci-dessous ? La ligne rouge a été tracée manuellement dans PowerPoint.
Veuillez joindre les données du fichier JMP pour référence. Merci pour votre réponse.

Automatisation et scriptsAnalyse et modélisation des données de baseWindowsRe : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéLa variation des limites de spécifications par catégorie de données dans le graphique de variabilité donne-t-elle des idées ?
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut,
J'ai vérifié et suivi les étapes, mais cela n'a toujours pas fonctionné, même en utilisant directement son fichier joint et son script.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéUtilisation de vos données (+ ajout de limites) et petite correction du script à partir de ce thread

Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut jthi,
Vous avez bien dessiné le graphique que je voulais, mais je ne sais toujours pas comment modifier le script. Merci pour votre réponse.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de 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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut jthi,
Merci pour votre script, il a fonctionné avec succès.
Concernant le paramètre de limite ci-dessous, si j'ai jusqu'à 100 données et que j'ajoute une ligne de limite uniquement sur la « Phase » dédiée, existe-t-il des solutions pour optimiser le script suivant ? Merci.
// 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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéVous pouvez créer une table de limites de spécifications ou, si vous n'avez pas trop de paramètres, un tableau associatif pour cela
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"];
);
Ou en utilisant le tableau des spécifications
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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut jthi,
Cela a fonctionné lorsque j'ai utilisé la méthode 1.
En supposant que je souhaite que L2 n'ait pas d'USL/LSL, comment puis-je l'optimiser ?
J'ai essayé de définir la valeur = 0, mais une ligne rouge s'affiche à la position Y-zéro.
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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéJe définirais la valeur comme manquante si vous ne souhaitez pas l'avoir et je pense que cela devrait fonctionner avec le script.
Voir plus...
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
Vous pouvez également modifier légèrement le script et vous assurer qu'il ignore ceux qui ont des valeurs manquantes, mais cela peut ne pas être nécessaire.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut Jarmo,
J'essaie de passer de la ligne à la zone graphique, mais cela ne fonctionne pas avec le script modifié ci-dessous. Comment puis-je modifier ?
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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéExiste-t-il une raison spécifique pour essayer de modifier la zone graphique dans le script graphique ?
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut Jarmo,
Lorsqu'il existe plusieurs ensembles de phases/groupes sur l'axe des X, cette ligne peut masquer les points de données du diagramme en boîte. Je préfère utiliser l'image suivante.

Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéVous pourriez alors utiliser Rect au lieu de Line(), sans avoir besoin de boîte graphique (celle-ci est déjà présente). Vous devrez gérer les valeurs manquantes si vous optez pour cette option, car les points manquants pourraient entraîner des problèmes avec Rect().

Eval(EvalExpr(
fb << Add Graphics Script(
Transparency(0.2);
Pen Color("Green");
Fill Color("Green");
Rect(Expr(lslstart), Expr(uslend), 1);
);
));Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut Jarmo,
Merci pour votre réponse rapide.
Une autre question pour ajouter une valeur supplémentaire sur l'axe X.
Lorsque j'ai saisi une autre valeur X (SampleA), j'ai modifié le script ci-dessous. Cependant, le résultat de la ligne de limite est incorrect. Comment puis-je le modifier ?
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 : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéComment les limites sont-elles formées (en fonction de quels groupes) ? Quel est le problème ? Vous devrez probablement ajuster les valeurs « Résumé », « Résumé » et « Décompte ».
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéOui, j'ai remarqué cela, j'ai donc modifié le script pour la valeur Summarize et curcount. Cependant, la ligne de limite ne peut pas couvrir toutes les conditions de phase. Les limites sont toujours basées sur la « phase ». (Veuillez noter qu'il n'y a pas de nouvel axe des X SampleA.)

Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéVous pouvez créer une nouvelle colonne dans votre table principale, combinant SampleGroup et :SampleA, par exemple, en les concaténant. Utilisez-la ensuite pour les N catégories du résumé et pour curcount afin d'obtenir les valeurs correctes.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de 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"];
J'ai modifié le script ci-dessus, mais la ligne de limite ne peut pas être générée. Comment puis-je la modifier ?
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéQu'est-ce qui ne va pas (je n'ai pas vos données donc je ne peux pas vérifier) ?
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéReportez-vous aux pièces jointes pour les données de test et le script.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéComme indiqué précédemment, le plus simple est de créer une colonne de regroupement et de l'utiliser dans votre tableau récapitulatif. Il peut également suffire de calculer la somme des n catégories de plusieurs groupes.
curcount = Sum(dt_summary[i, {"Leg", "Layer"}]);Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut,
Si vous recherchez une solution sans script et que vous acceptez l'utilisation de Graph Builder, il gère en fait les limites de spécifications à plusieurs niveaux par catégorie. Assurez-vous simplement que vos limites de spécifications sont structurées en conséquence (par exemple, via la propriété de colonne).
Si vous souhaitez conserver le graphique de variabilité, ce comportement n'est pas intégré au cœur de JMP, mais il est pris en charge par YieldOptiX, un plugin développé pour l'analyse des données de test. Il prend en charge les limites de spécification basées sur les catégories directement dans le graphique de variabilité.
Ainsi, les deux options (Graph Builder ou Variability Chart avec limites groupées) sont prises en charge en fonction de votre interface préférée — cela dépend simplement de ce qui convient le mieux à votre processus.
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéSalut Jarmo
Lorsque je saisis plusieurs données, la limite de spécification ne correspond pas au contenu du script. Comment puis-je modifier le script ?
Re : Comment définir les limites de spécification par catégorie de données dans le graphique de variabilitéVous devez calculer le nombre de groupes différemment. Une solution simple consiste à ajouter une nouvelle colonne à votre table de données combinant les segments et les couches.
dt << new column("LEGLAYER", Character, Nominal, Formula(:Leg ||:Layer));
puis utilisez cela dans le résumé
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)
);
et obtenir le compte à rebours à partir de cela
curcount = Sum(dt_summary[i, {"LEGLAYER"}]);

Re : Comment définir les limites de spécification par catégorie de données dans un graphique de variabilité ?J'ai utilisé le script que vous avez partagé, mais la limite de spécification ne s'affiche pas.
Veuillez vérifier le script en pièces jointes et indiquer comment le modifier.