How can you show the RGB color coordinates of crayons in an interesting way using JMP? (Image copyright James A. Alloway, Jr. Used with permission.)How can you show the RGB color coordinates of crayons in an interesting way using JMP? (Image copyright James A. Alloway, Jr. Used with permission.)How can you show the RGB color coordinates of crayons in an interesting way using JMP? (Image copyright James A. Alloway, Jr. Used with permission.)How can you show the RGB color coordinates of crayons in an interesting way using JMP? (Image copyright James A. Alloway, Jr. Used with permission.)Comment pouvez-vous afficher les coordonnées de couleur RVB des crayons de couleur de manière intéressante à l'aide de JMP ? (Image copyright James A. Alloway, Jr. Utilisé avec permission.)
Le sac postal d'ingénierie
Épisode 2 : Je vois tes vraies couleurs
De temps à autre, les ingénieurs système de JMP se heurtent à des questions intéressantes qui sortent quelque peu de la gamme typique de JMP usage. Ces applications sont généralement intelligentes et montrent à quel point l'utilisation des données n'est pas réservée aux problèmes commerciaux ou techniques. Vous trouverez ci-dessous un exemple d'un autre collègue de l'État de New York que j'ai pensé qu'il serait amusant de partager.
Jim essayait d'analyser les données sur 150 crayons Crayola dans le cadre d'un travail bénévole. Il espérait montrer aux étudiants des visualisations de données intéressantes qui susciteraient leur intérêt pour les STEAM (Science, Technologie, Ingénierie, Art & Design et Mathématiques).
La question
Salut, Mike [JMP],
J'ai enfin une question pour vous. Je crée un ensemble de données pour une présentation STEAM. Pour la partie Art & Design, j'ai des données sur les crayons Crayola (150 rangs). J'essaie de créer un tracé ternaire en utilisant les coordonnées de couleur (R, G,
, que j'ai pour chaque ligne (couleur). Je peux créer l'intrigue sans difficulté, mais je veux que chaque marqueur sur l'intrigue soit la couleur réelle représentée dans chaque ligne. J'ai pu le faire à la main, mais je suppose qu'il doit y avoir un moyen plus simple (sans avoir à écrire de script).
Toute orientation dans ce sens serait appréciée ! (Il n'y a pas d'urgence à ce stade.)
Merci.
Jim [Utilisateur]
Ma réponse
Essayez ceci.
Eh bien… c'était un échange instructif, n'est-ce pas ?
Ceci est un exemple d'un de ces rares cas où la seule façon de montrer à quelqu'un comment faire quelque chose c'est faire réellement ça pour eux. Je ne suis généralement pas fan de faire cela, mais parfois c'est la meilleure façon. Et oui, dans ce cas, la réponse est un script. Prenons une seconde et parcourons les données et ce que j'ai fait. Les données fournies par Jim (disponibles ici ) ressemble à ça:
Jim's original data tableJim's original data tableJim's original data tableJim's original data tableTable de données originale de Jim
Ce que nous voyons, ce sont des colonnes pour le nom du crayon et les coordonnées RVB HSV pour cette couleur. Je n'ai pas utilisé les coordonnées HSV pour ma solution. Jim aimerait trouver un moyen d'attribuer par programme une couleur à l'état de la ligne qui correspond à la couleur décrite par les coordonnées RVB . (Si cela vous semble compliqué, accrochez-vous, ce n'est pas si mal.) Voici le tableau de données que j'ai renvoyé :
My data tableMy data tableMy data tableMy data tableMon tableau de données
Notez les scripts de table que j'ai inclus (à côté des flèches vertes à gauche). Le premier est celui où la magie opère. Les autres sont des analyses amusantes dont je parlerai plus tard.
Eh bien, chatouillez-moi rose!
Tout d'abord, regardons cette entreprise de coloration. Selon ce que vous essayez de faire, JMP a besoin que les coordonnées RVB soient formatées différemment. Travailler avec les couleurs de cellule (les arrière-plans des noms de couleur dans les colonnes) et les couleurs d'état de ligne nécessite que RVB soit mis à l'échelle entre 0 et 1. Donc, parce que j'essayais d'être transparent avec ce que je faisais, j'ai créé un ensemble de colonnes (rouge, vert, bleu) pour redimensionner les coordonnées RVB de l'échelle de couleurs 8 bits (0-255) entre 0 et 1 . Le script de table, "Cellules de couleur", fait alors deux choses. Tout d'abord, il parcourt chaque ligne à l'aide d'un Pour chaque ligne() boucle et la :Couleur Nom << Cellules de couleur() message pour définir les couleurs des cellules. Ensuite, encore une fois par souci de transparence (et probablement parce que j'ai fait cela au cours de quelques jours - je ne me souviens plus lesquels, pour être honnête), j'ai utilisé une deuxième étape impliquant un Pour() boucle pour définir les états de ligne à l'aide des colonnes que j'ai créées.
Names Default To Here( 1 );
dt = Current Data Table();
dt << Clear Select;
For Each Row(
// get RGB values
red = Column( "Red" )[Row()];
green = Column( "Green" )[Row()];
blue = Column( "Blue" )[Row()];
// color the "sample" column cell with the sample color
:Color Name << Color Cells( RGB Color( red, green, blue ), Row() );
);
For( i = 1, i <= N Rows(), i++,
// get RGB values
red = Column( "Red" )[i];
green = Column( "Green" )[i];
blue = Column( "Blue" )[i];
dt << Select Rows( i );
dt << Colors( RGB Color( red, green, blue ) );
dt << Clear Select;
);
L'exécution de ce script crée le tableau coloré que j'ai renvoyé à Jim.
Bien que ce tableau soit assez coloré, la consommation de ce type de données nécessite vraiment des visualisations puissantes. Étant donné que RVB est un espace de coordonnées ternaires, un tracé ternaire semble être un point de départ approprié :
A Ternary Plot is a good place to start.A Ternary Plot is a good place to start.A Ternary Plot is a good place to start.A Ternary Plot is a good place to start.Un terrain ternaire est un bon point de départ.
La coloration de l'état des lignes fournit une image claire de l'emplacement de chaque crayon dans l'espace colorimétrique RVB. Je dois aussi souligner qu'il y a un peu caveat emptor sur l'utilisation des diagrammes ternaires pour cette application. À proprement parler, la plate-forme Ternary Plot s'attend à ce que les trois valeurs fournies pour chaque coordonnée totalisent 1. Lorsque les données fournies ne répondent pas à ce critère, il normalise les points de données en conséquence. Ainsi, bien que le tracé ternaire soit vraiment soigné, ce n'est pas une représentation précise à 100% de l'espace colorimétrique. Cependant, puisque le but de l'exercice était de produire des graphiques qui exciteraient l'intérêt de STEAM, je pense qu'il est acceptable d'échanger un peu de précision contre un impact visuel…
Analytiquement, il est possible de regrouper les crayons en fonction de la similitude de leurs couleurs à l'aide d'un regroupement hiérarchique. Ici, j'ai montré le Tracé des constellations , qui est ma façon préférée de regarder un dendrogramme, en exécutant le clustering hiérarchique sur les coordonnées spatiales RVB :
A Constellation Plot produced by performing Hierarchical Clustering on the data.A Constellation Plot produced by performing Hierarchical Clustering on the data.A Constellation Plot produced by performing Hierarchical Clustering on the data.A Constellation Plot produced by performing Hierarchical Clustering on the data.Un tracé de constellation produit en effectuant un clustering hiérarchique sur les données.
À partir de là, je peux voir qu'il y a quelque part entre 5 et 7 groupes de couleurs. J'ai défini le nombre de grappes sur 5, puis j'ai regardé les parcelles parallèles. Les différences entre les clusters sont facilement visibles, tout comme les similitudes au sein des clusters. J'ai trouvé intéressant que les couleurs pastel et diurne soient placées dans leurs propres groupes (groupes 2 et 3).
The pastel and day-glow colors were put into their own clusters (clusters 2 and 3).The pastel and day-glow colors were put into their own clusters (clusters 2 and 3).The pastel and day-glow colors were put into their own clusters (clusters 2 and 3).The pastel and day-glow colors were put into their own clusters (clusters 2 and 3).Les couleurs pastel et diurne ont été placées dans leurs propres groupes (groupes 2 et 3).
Vous pouvez voir des résultats similaires avec le script de clustering k-Means.
Post-scriptum
Comme toujours, revisiter quelque chose après l'avoir posé pendant un certain temps offre une nouvelle perspective. J'ai revu cet ensemble de données plusieurs fois depuis que Jim m'a initialement contacté. Que puis-je dire ? Je suis un nerd, et c'est un petit jeu de données amusant avec lequel jouer. Tout d'abord, en écrivant cet article, j'ai réalisé que j'avais rendu ce code beaucoup plus complexe que nécessaire. Toute l'opération de coloration pourrait être effectuée à l'aide d'un seul Pour chaque ligne() boucle. Je peux également simplifier le codage en créant une liste et en transformant la liste pour obtenir le jeu de coordonnées dont JMP a besoin sans créer de nouvelles colonnes.
Names Default To Here( 1 );
dt = Current Data Table();
dt << Clear Select;
For Each Row(
// get RGB values
r = Column( "R" )[Row()];
g = Column( "G" )[Row()];
b = Column( "B" )[Row()];
rowVal = {r, g, b};
// create a scaled set of colors
rowValS = rowVal/255;
// color the "sample" column cell with the sample color
:Color Name << Color Cells( RGB Color( rowValS ), Row() );
// apply a row state to each row
dt << Select Rows( Row() );
dt << Colors( RGB Color( rowValS ) );
dt << Clear Select;
);
Ensuite, j'ai vraiment aimé le diagramme ternaire de l'ensemble de données original de Jim (problèmes de précision mis à part). Cela m'a fait réfléchir à ce qui se passerait si je générais un exemple de remplissage d'espace qui cartographierait toutes les combinaisons dans l'espace RVB. Le script que j'ai créé est assez complexe. Je l'ai téléchargé sur File Exchange en tant que Cartographie de l'espace colorimétrique RVB si vous voulez jeter un oeil. Quoi qu'il en soit… la parcelle ternaire qu'elle produit est assez impressionnante. Rétrospectivement, j'aurais peut-être dû intituler cet article "Dark Side of the Moon".
This is what happened when I generated a space-filling example that mapped out all the combinations in the RGB space.This is what happened when I generated a space-filling example that mapped out all the combinations in the RGB space.This is what happened when I generated a space-filling example that mapped out all the combinations in the RGB space.This is what happened when I generated a space-filling example that mapped out all the combinations in the RGB space.C'est ce qui s'est passé lorsque j'ai généré un exemple de remplissage d'espace qui a cartographié toutes les combinaisons dans l'espace RVB. Note de l'éditeur: Avez-vous lu le premier volet de notre série Engineering Mailbag ? Découvrez comment Mike aide un utilisateur qui utilisait JMP décider de s'inscrire ou non à un service de déneigement.
Une note de l'auteur
Pour ceux d'entre vous qui relisez ceci, non vous n'êtes pas fou, le titre a un peu changé.J'ai reçu une demande de mise à jour du titre afin qu'il soit plus facile à trouver pour nos moteurs de recherche.Je ne peux que supposer que c'est parce que certains moteurs de recherche sont des incarnations modernes de bibliothécaires de référence du XIXe siècle sans sens de l'humour.Veuillez nous excuser pour tout inconvénient.-M