Couleur sur des indicateursBonjour à tous,
J'essaye de créer un rapport dans JMP permettant de voir des dérives sur certains processus.
Par exemple, j'étudie 6 items dans mon processus et j'aimerais avoir un indicateur avec des couleurs :
- si 5 points consecutifs (ou plus) supérieur à 3sigma : couleur rouge
- si 3 points consecutifs (ou plus) supérieur à 3sigma : couleur jaune
- sinon couleur verte
Et ensuite j'aimerais pouvoir afficher dans un rapport quelque chose comme ceci par item en fonction des couleurs des indicateurs :

Comment je pourrais procéder pour avoir quelque chose de similaire sur JMP ?
Merci pour votre réponse.
Automation and ScriptingRe: Couleur sur des indicateursChaque « élément » se trouve-t-il dans une colonne distincte ?
Vos données sont-elles dans un ordre séquentiel ?
Combien d'« articles » différents existe-t-il ?
Le rapport ne doit-il contenir que 3 éléments différents dans chaque ligne du rapport ?
Re: Couleur sur des indicateursSi vous souhaitez créer un tableau, utilisez le tableau de données et coloriez les cellules. Dans le générateur de graphiques, vous pourrez peut-être utiliser une carte thermique. Si vous souhaitez créer un script, vous disposez de nombreuses options différentes pour définir la couleur d'arrière-plan.
Re: Couleur sur des indicateursChaque « élément » se trouve-t-il dans une colonne distincte ? Oui, un élément par colonne
Vos données sont-elles dans un ordre séquentiel ? Oui, elles peuvent être triées dans un ordre séquentiel
Combien d'« articles » différents existe-t-il ? Beaucoup de... .
Le rapport ne doit-il contenir que 3 éléments différents dans chaque ligne du rapport ? Oui
Re: Couleur sur des indicateursUne option simple ressemble à ceci
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(6),
Compress File When Saved(1),
New Column("item",
Character,
"Nominal",
Set Values({"ITEM1", "ITEM2", "ITEM3", "ITEM4", "ITEM5", "ITEM6"})
),
New Column("status",
Character,
"Nominal",
Set Values({"Green", "Green", "Red", "Yellow", "Green", "Red"})
)
);
lub = Lineup Box(N Col(3));
For Each Row(dt,
Eval(EvalExpr(
lub << Append(
Text Box(:item, << Background Color(Expr(:status)))
)
));
);
nw = New Window("",
lub
);

Re: Couleur sur des indicateursMerci pour la réponse, j'essaye de créer une table similaire avec les indicateurs rouge, jaune et vert.
Mon objectif est de créer :
- if 5 consecutive points (or more) are red (above 3 sigma) so the color of the last point is red
- if 3 consecutive points (or more) are red (above 3 sigma) so the color of the last point is yellow
- otherwise green color
En pièce-jointe vous pouvez trouver une table qui sert d'exemple, j'ai créé le script suivant mais sans succès :
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
// Boucle pour calculer l'indicateur ligne par ligne
For(i = 1, i <= N Rows(5), i++,
// Récupérer les 5 dernières valeurs de l'indicateur
last_five = dt:status[i,5]; //
// Comptez le nombre de "rouge"
count_rouge = N Items( last_five == "rouge");
// Attribuer une couleur en fonction des règles
If(count_rouge == 5,
dt:Indicateur Global[i] = "rouge"; // 5 rouges
,
If(count_rouge >= 3,
dt:Indicateur Global[i] = "jaune"; // 3 ou plus rouges
,
dt:Indicateur Global[i] = "vert"; // Sinon vert
);
);
);Re: Couleur sur des indicateursJe pense que ce code fait ce que vous voulez :
dt = New Table( "testcolors", Add Rows( 15 ),
New Column( "Article", Character, "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"}
) ),
New Column( "Item", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] )
),
New Column( "status", Character, "Nominal",
Set Values(
{"red", "red", "red", "green", "green", "red", "red", "red", "red",
"red", "red", "green", "red", "red", "red"}
)
),
// Créez une nouvelle colonne pour l'indicateur
New Column("Indicateur", Character, Nominal)
);
one_color = "xyz";
icolor = 0;
for (i = 1, i <= nrows(dt), i++,
one_color = dt:status[i];
if (one_color == "red",
icolor++;
// else
,
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
icolor = 0;
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
icolor = 0;
);
);
);
// Handle the last row
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
);

Re: Couleur sur des indicateursJe reste perplexe. Cependant, étant donné le tableau de données que vous avez fourni, qui semble être un tableau contenant les résultats de ce que vous essayez de calculer, on peut facilement colorer les cellules de votre colonne Indicateur

names default to here(1);
dt=current data table();
dt << New Column("Indicateur", Character, Nominal);
:indicateur << color cells("red",dt<<GET rows="" where=""></GET>
<P>ou peut créer un rapport séparé</P>
<P><SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="txnelson_1-1736426542617.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><span class="lia-inline-image-display-wrapper" image-alt="txnelson_1-1736426542617.png" style="width: 119px;"><img src="https://us.v-cdn.net/6038925/uploads/images/71760iF5D0EC4B9B8E8098/txnelson_1-1736426542617.png" role="button" title="txnelson_1-1736426542617.png" alt="txnelson_1-1736426542617.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P>
<CODE class=" language-jsl">nw=new window("colors", lub=lineupbox(ncol(3)));
For Each Row(dt,
Eval(EvalExpr(
lub << Append(
Text Box("Item" || char(:item), << Background Color(Expr(:status)))
)
));
);Re: Couleur sur des indicateursBonjour, merci pour la réponse cela fonctionne bien sur cette base test !
J'essaye de généraliser ce script lorsque j'ai plusieurs articles. Les indicateurs couleur sont créés par article.
J'utilise le script suivant mais je n'obtiens pas le bon résultat final :
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal)
one_color = "xyz";
icolor = 0;
Summarize(dt, unique_objects = by(:Article));
m_obs = dt[0, "Article"];
For each( {unique_objects}, m_obs,
for (i = 1, i <= nrows(dt), i++,
one_color = dt:status[i];
if (one_color == "red",
icolor++;
// else
,
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
icolor = 0;
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
icolor = 0;
);
);
);
// Handle the last row
if (icolor >= 5,
dt:Indicateur << Color Cells( "Red", i-1 );
// else
,
icolor >= 3,
dt:Indicateur << Color Cells( "Yellow", i-1 );
);
);Le résultat obtenu :

La ligne 18 on devrait avoir la couleur jaune car il y a 3 points consecutifs rouge pour l'article B...
Re: Couleur sur des indicateursVoici mon approche

names default to here(1);
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
one_color = "xyz";
icolor = 0;
For Each Row(
// If the value of Article has changed set icolor to 0
If( Lag( :Article ) != :Article,
icolor = 0
);
// If status is red, increment icolor else set it back to zero
If( :status == "red",
icolor++,
icolor = 0
);
// Check for the number of icolor
// Set the value for the cell to the appropriate color
// When a color is specified remove no longer correct cell colors
// for previous rows
If(
icolor >= 5,
dt:Indicateur << color cells("red",row());
dt:Indicateur << color cells("",row()-1);
If( icolor == 5,
dt:Indicateur << color cells("",row()-2);
);,
icolor >= 3,
dt:Indicateur << color cells("yellow",row());
dt:Indicateur << color cells("",row()-1);
);
);Re: Couleur sur des indicateursMerci pour votre réponse.
Cela fonctionne mais pas exactement comme cela devrait.
J'ai essayé de faire des modifications sur la deuxième boucle if mais je ne trouve pas la solution.
Voici ci-dessous le résultat auquel j'aimerais arriver exactement :

Re: Couleur sur des indicateursMon dernier script supposait que vous vouliez uniquement que la dernière ligne d'une série conserve la couleur calculée. Pour accomplir ce que vous avez spécifié dans votre dernière spécification, j'ai simplement commenté les lignes qui réinitialisent les couleurs si le script déterminait qu'il ne s'agissait pas de la dernière ligne de la série.

names default to here(1);
dt = current data table();
// Créez une nouvelle colonne pour l'indicateur
dt << New Column("Indicateur", Character, Nominal);
one_color = "xyz";
icolor = 0;
For Each Row(
// If the value of Article has changed set icolor to 0
If( Lag( :Article ) != :Article,
icolor = 0
);
// If status is red, increment icolor else set it back to zero
If( :status == "red",
icolor++,
icolor = 0
);
// Check for the number of icolor
// Set the value for the cell to the appropriate color
// When a color is specified remove no longer correct cell colors
// for previous rows
If(
icolor >= 5,
dt:Indicateur << color cells("red",row());
//dt:Indicateur << color cells("",row()-1);
/*If( icolor == 5,
dt:Indicateur << color cells("",row()-2);
);*/,
icolor >= 3,
dt:Indicateur << color cells("yellow",row());
//dt:Indicateur << color cells("",row()-1);
);
);Re: Couleur sur des indicateursJe ne sais pas vraiment en quoi cela est lié à la question initiale, mais il existe une option un peu différente pour créer la colonne d'indicateurs
dt = Current Data Table();
dt << New Column("Color", Character, Nominal,
Set Property(
"Value Colors",
{"Green" = "Green", "Red" = "Red", "Yellow" = "Yellow"}
),
Color Cell By Value,
Formula(
is_red = :status == "red";
If(Row() == 1,
red_count = is_red;
);
If(:Article != Lag(:Article, 1) | is_red == 0,
red_count = is_red;
,
red_count = red_count + is_red;
);
If(red_count >= 5,
"Red";
, red_count >= 3,
"Yellow"
,
"Green"
);
)
);