cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Try the Materials Informatics Toolkit, which is designed to easily handle SMILES data. This and other helpful add-ins are available in the JMP® Marketplace
Choose Language Hide Translation Bar
hcarr01
Level VI

Couleur sur des indicateurs

Bonjour à 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 : 

hcarr01_0-1736352486062.png

 

Comment je pourrais procéder pour avoir quelque chose de similaire sur JMP ?

Merci pour votre réponse.

 

9 REPLIES 9
txnelson
Super User

Re: Couleur sur des indicateurs

Is each "Item" in a separate column?

Are your data in sequential order"

How many different "Items" are there?

Should the report only have 3 different items in each row of the report?

Jim
hcarr01
Level VI

Re: Couleur sur des indicateurs

Is each "Item" in a separate column?  Yes one item by column

Are your data in sequential order"  Yes it can be sort in a sequential order

How many different "Items" are there?  A lot of....

Should the report only have 3 different items in each row of the report?  Yes

jthi
Super User

Re: Couleur sur des indicateurs

One simple option is something like this

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
);

jthi_0-1736410983729.png

 

-Jarmo
hcarr01
Level VI

Re: Couleur sur des indicateurs

Merci 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
        );
    );
);
txnelson
Super User

Re: Couleur sur des indicateurs

I remain confused.  However, given the data table you supplied, which appears to be a table that has the results of what you are attempting to calculate, one can easily color the cells for your Indicateur column

txnelson_0-1736426170368.png

names default to here(1);
dt=current data table();
dt << New Column("Indicateur", Character, Nominal);

:indicateur << color cells("red",dt<<get rows where(:status=="red"));
:indicateur << color cells("yellow",dt<<get rows where(:status=="yellow"));
:indicateur << color cells("green",dt<<get rows where(:status=="green"));

or can create a separate report

txnelson_1-1736426542617.png

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)))
		)		
	));
);
Jim
jthi
Super User

Re: Couleur sur des indicateurs

If you want to have a table, use data table and color the cells. In graph builder you might be able to use heatmap. If you want to script it, you have many different options where you can set the background color.

-Jarmo
pmroz
Super User

Re: Couleur sur des indicateurs

I think this code does what you want:

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 );
);

pmroz_0-1736426492609.png

 

hcarr01
Level VI

Re: Couleur sur des indicateurs

Bonjour, 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 : 

 

hcarr01_0-1736504549624.png

La ligne 18 on devrait avoir la couleur jaune car il y a 3 points consecutifs rouge pour l'article B...

 

txnelson
Super User

Re: Couleur sur des indicateurs

Here is my approach

txnelson_0-1736510845084.png

 
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);
	);
);
Jim