Cellules de couleur basées sur le résultat de la formuleSalut tout le monde,
J'ai une colonne (appelons-la Indicateur) avec une formule qui renvoie un 0 ou un 1.
Pour l'instant je sais comment faire :
formulaResult = :Indicator << Get Values;
:Indicator << Color Cells( "red", Loc(formulaResult==1) );
Mais ce que je veux vraiment faire, c'est que la table de données réponde dynamiquement : si je modifie les données pour que l'indicateur passe à 0 (faux), je ne veux plus que la cellule soit mise en surbrillance, et si j'ajoute plus de données à le tableau et la formule calcule, je veux que les 1 soient mis en évidence.
Je n'arrive pas à comprendre comment faire cela avec Color Cells. J'ai pensé qu'une implémentation étrange de la propriété de colonne Dégradé de couleur pourrait peut-être fonctionner, mais après avoir joué avec cela pendant un certain temps, je n'ai pas pu obtenir le résultat que je voulais. A la recherche d'idées.
Michael
Re : Colorer les cellules en fonction du résultat de la formuleVoici la même approche avec une coloration blanche Autre clause. La colonne masquée est ici numérique par défaut, donc Then et Else doivent renvoyer quelque chose de numérique, par exemple une valeur manquante.
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); .,
:weight << color cells("White", Row()); .)),
Hide(1)
);
Re : Colorer les cellules en fonction du résultat de la formuleCette approche fonctionne pour moi, sauf si vous modifiez les poids. Je pensais pouvoir simplement ajouter une requête pour définir le paramètre else dans l'instruction If() sur Color Cells("White",Row()) mais cela ne semble pas fonctionner.
En outre, il nécessite une nouvelle colonne pour chaque paramètre qui a des limites de spécification, bien que je suppose que nous pourrions écrire une formule créative qui parcourt toutes les colonnes, vérifie une propriété de colonne Spec Limits, et si elle en trouve une, colore les colonnes appropriées ? Au moins la ou les colonnes supplémentaires sont masquées.
Re : Colorer les cellules en fonction du résultat de la formulePeut-être pas évident, mais vous trouverez peut-être cette approche moins "maladroite" :
Names Default To Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
dt << New Column("highlight cells",
Formula(If(100 < :weight < 135, :weight << color cells("Red", Row()); ., .)),
Hide(1)
);Re : Colorer les cellules en fonction du résultat de la formuleTout à fait d'accord.Vous devriez certainement faire une demande de fonctionnalité pour cela à support@jmp.com.
Re : Colorer les cellules en fonction du résultat de la formuleC'est maladroit et il devrait y avoir un moyen plus direct/évident de le faire dans JMP, mais cette solution peut fonctionner. Merci.
Re : Colorer les cellules en fonction du résultat de la formuleDonc, fondamentalement, je ne fais que simuler un dégradé de couleurs qui se dégrade sur une petite fenêtre.Donc, pour seulement deux couleurs, vous n'avez besoin que de 4 points. 0, un nombre très proche de 0, un nombre très proche de 1 et 1. Si vous vouliez plus de 2 couleurs, vous deviez calculer des valeurs de 0 à 1 à chaque point de votre plage souhaitée.par exemple si vous vouliez 110, il faudrait ajouter deux valeurs à 10/35 et 10/35+.0000001
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387,
{{255, 0, 0}, {0, 255, 0}, {0, 255, 0}, {255, 0, 0}}, //list of colors
{0, .00000001, .9999999, 1}}, //corresponding locations from 0 to 1
Range( {100, 135, 117.5} ) //minimum, maximum and center. 0, 1, and .5 is another way to look at it
}
);
Column(dt, "weight") << Color Cell By Value(1);
Re : Colorer les cellules en fonction du résultat de la formuleDésolé. Cette solution ne me permet pas de colorer les valeurs hors d'une plage d'intérêt avec une couleur (par exemple, le rouge) et dans la plage d'intérêt avec une couleur différente (par exemple, le blanc). Cette solution col min, col signifie, col max semble être un moyen de mettre simplement quelques valeurs par défaut pour faire un dégradé. Ce qui était attrayant @vince_faller La solution est qu'il crée un dégradé personnalisé qui force exactement deux couleurs (je pense) sur la colonne. Ce qui ne m'attire pas encore, c'est que je ne comprends pas comment contrôler précisément quand je passe de ma "bonne" couleur à ma "mauvaise" couleur.
Re : Colorer les cellules en fonction du résultat de la formuleVous pouvez faire les calculs avec colmin, colmax et colmean :
frr_min = col min(:FRR);
frr_max = col max(:FRR);
frr_avg = col mean(:FRR);
// Color FRR with a gradient
column(hlt_dt, "FRR") << Set Property( "Color Gradient", {"Light Spectral", Range(expr(frr_min), expr(frr_max), expr(frr_avg))});
column(hlt_dt, "FRR") << color cell by value(1);Re : Colorer les cellules en fonction du résultat de la formuleC'est plus proche. Il semble que la plage verte est d'env. 92-127 pour cet exemple. Supposons que ma plage de spécifications soit comprise entre 100 et 135. Comment puis-je faire le calcul pour déterminer les points finaux à alimenter dans la fonction Range dans Color Gradient? (Et puis j'ai le point douloureux de devoir expliquer ici aux autres utilisateurs de JMP pourquoi ils doivent transformer deux nombres, c'est-à-dire 100 et 135, en trois valeurs pour satisfaire la fonction Range.)
Re : Colorer les cellules en fonction du résultat de la formulePourquoi le dégradé de couleurs ne fonctionne-t-il pas ?
Names Default to Here(1);
dt = Open("$SAMPLE_DATA\Big Class.jmp");
Column(dt, "weight") << Set Property(
"Color Gradient" ,
{{"Something", 16387, {{255, 0, 0}, {255, 0, 0}, {0, 255, 0}, {0, 255,
0}, {255, 0, 0}, {255, 0, 0}}, {0, 0.33333333, 0.33333334,
0.666666666666, 0.666666666667, 1}}, Range( {64, 172, 105} )
}
);
Column(dt, "weight") << Color Cell By Value(1);

Re : Colorer les cellules en fonction du résultat de la formuleCe problème revient déjà pour moi une semaine plus tard.
La nouvelle application est que nous avons un certain nombre de situations où nous voulons signaler des valeurs qui ne sont pas conformes aux spécifications. Ni le dégradé de couleurs ni les couleurs de valeur ne font un excellent travail. Nous pouvons certainement créer une nouvelle colonne et une nouvelle couleur basées sur 0 contre 1, mais si j'ai plusieurs variables avec des spécifications à appliquer, je vais devoir créer une nouvelle colonne pour chaque variable. Cela deviendra vite encombrant ! J'aimerais une meilleure solution.
Re : Colorer les cellules en fonction du résultat de la formulePour compter les défauts, je peux travailler avec ça. Parfois, j'ai aussi des variables continues avec lesquelles je dois travailler et cette solution ne fonctionnera pas là-bas, mais peut-être que le dégradé de couleurs fonctionnerait bien dans cette situation.
Re : Colorer les cellules en fonction du résultat de la formuleFaites une liste qui définit les couleurs de valeur comme vous le souhaitez, par exemple blanc pour 0 et rouge pour les entiers > 0. La propriété Value Colors semble exiger que chaque valeur à colorer ait sa propre "affectation". Ainsi, toutes les valeurs possibles de "Défauts" doivent être incluses dans la liste.
Exemple:
// Make list that defines the Value Colors
n = 10; //set highest conceivable nr of defects
vc = {0 = 2}; // White cell color for no defects
For(i = 1, i <= n, i++,
Insert Into(vc, Eval Expr(Expr(i) = 19)) // red for defects 0
);
// Example table
dt = New Table("test",
Add Rows(50),
New Column("Defects", Formula(Random Integer(0, 3)), Set Property("Value Colors", vc), Color Cell by Value)
);
Re : Colorer les cellules en fonction du résultat de la formuleMarque,
Bien sûr. Il est logique que je puisse simplement créer une autre colonne d'indicateurs. Le seul problème est que cela colorera les cellules dans la colonne de l'indicateur plutôt que de mettre en évidence le nombre de défauts, comme ceci :

Ce que je préférerais c'est ça :

Des idées?
Re : Colorer les cellules en fonction du résultat de la formuleVous avez juste besoin de changer la logique utilisée dans la formule de la colonne, par exemple, :data > 0.Re : Colorer les cellules en fonction du résultat de la formuleGénial! Je pense avoir un peu simplifié mon problème. Essayons cette généralisation.
Maintenant, mon indicateur est maintenant un décompte des défauts (0, 1, 2, 3, 4, etc.). Comment puis-je colorer tout >=1 avec la même couleur, et ne pas colorer les zéros ?
Re : Colorer les cellules en fonction du résultat de la formuleEssayez la propriété "Value Colors" avec "Color Cells by Value" cochée.
Exemple:
// Example table
dt = New Table("test",
Add Rows(10),
New Column("data", Formula(Random Uniform())),
New Column("Indicator",
Set Property("Value Colors", {. = -12632256}),
Formula(:data < 0.5),
Color Cell by Value
)
);
// Test if dynamic
Wait(1);
:data << eval formula;
Wait(1);
dt << add rows(10);