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.)¿Cómo puede mostrar las coordenadas de color RGB de los crayones de una manera interesante usando JMP? (Copyright de la imagen James A. Alloway, Jr. Usada con permiso).
El buzón de ingeniería
Episodio 2: Veo tus verdaderos colores
De vez en cuando, los ingenieros de sistemas de JMP se encuentran con preguntas interesantes que quedan algo fuera del rango típico de JMP uso. Estas aplicaciones son generalmente inteligentes y muestran cómo el uso de datos no es solo para problemas comerciales o técnicos. A continuación se muestra un ejemplo de otro colega del estado de Nueva York que pensé que sería divertido compartir.
Jim estaba tratando de analizar los datos de 150 crayones Crayola como parte de un trabajo voluntario. Esperaba mostrar a los estudiantes visualizaciones de datos geniales que despertaran su interés en STEAM (Ciencia, Tecnología, Ingeniería, Arte y Diseño y Matemáticas).
La pregunta
Hola, Mike [JMP],
Finalmente tengo una pregunta para ti. Estoy creando un conjunto de datos para una presentación STEAM. Para la parte de Arte y Diseño, tengo datos de crayones Crayola (150 filas). Estoy tratando de crear una trama ternaria usando las coordenadas de color (R, G,
, que tengo para cada fila (color). Puedo crear el diagrama sin dificultad, pero quiero que cada marcador en el diagrama sea del color real representado en cada fila. Pude hacer esto a mano, pero supongo que debe haber una manera más fácil (sin tener que escribir un guión).
¡Cualquier orientación en esta dirección sería apreciada! (No hay prisa en este punto).
Gracias.
Jaime [Usuario]
Mi respuesta
Probar esto.
Bueno... eso fue un intercambio informativo, ¿no?
Este es un ejemplo de uno de esos raros casos en los que la única manera de mostrarle a alguien cómo hacer algo es en realidad hacer para ellos. En general, no soy fanático de hacer esto, pero a veces esa es la mejor manera. Y sí, en este caso, la respuesta es un guión. Tomemos un segundo y analicemos los datos y lo que hice. Los datos proporcionados por Jim (disponibles aquí ) Se ve como esto:
Jim's original data tableJim's original data tableJim's original data tableJim's original data tableTabla de datos original de Jim
Lo que vemos son columnas para el nombre del crayón y las coordenadas HSV RGB para ese color. En realidad, no usé las coordenadas HSV para mi solución. A Jim le gustaría encontrar una manera de asignar mediante programación un color al estado de la fila que coincide con el color descrito por las coordenadas RGB . (Si eso suena complicado, espere, no es tan malo). Aquí está la tabla de datos que le envié:
My data tableMy data tableMy data tableMy data tablemi tabla de datos
Tenga en cuenta los scripts de tabla que incluí (junto a las flechas verdes a la izquierda). El primero es donde ocurre la magia. Los otros son algunos análisis divertidos de los que hablaré más adelante.
¡Bien, hazme cosquillas rosa!
Primero, echemos un vistazo a este negocio de colorear. Dependiendo de lo que esté tratando de hacer, JMP necesita que las coordenadas RGB tengan un formato diferente. Trabajar con los colores de las celdas (los fondos de los nombres de los colores en las columnas) y los colores del estado de las filas requiere una escala RGB entre 0 y 1. Entonces, como estaba tratando de ser transparente con lo que estaba haciendo, creé un conjunto de columnas (Rojo, Verde, Azul) para cambiar la escala de las coordenadas RGB de la escala de color de 8 bits (0-255) a entre 0 y 1 . El Table Script, "Color Cells", luego hace dos cosas. Primero, pasa por cada fila usando un Por cada fila() bucle y el :Color Nombre << Celdas de color() mensaje para establecer los colores de las celdas. Luego, nuevamente por transparencia (y probablemente porque hice esto en el transcurso de un par de días, no recuerdo cuál, para ser honesto), usé un segundo paso que involucraba un Para() loop para establecer los estados de fila usando las columnas que creé.
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;
);
Ejecutar este script crea la colorida tabla que le envié a Jim.
Ahora, si bien esta tabla es bastante colorida, consumir este tipo de datos realmente requiere algunas visualizaciones poderosas. Dado que RGB es un espacio de coordenadas ternario, una Gráfica Ternaria parece un punto de partida apropiado:
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.Una trama ternaria es un buen lugar para comenzar.
La coloración del estado de fila proporciona una imagen clara de dónde se encuentra cada crayón en el espacio de color RGB. También debo señalar que hay un poco de advertencia emptor sobre el uso de gráficos ternarios para esta aplicación. Estrictamente hablando, la plataforma Ternary Plot espera que los tres valores proporcionados para cada coordenada sumen 1. Cuando los datos proporcionados no cumplen con este criterio, normaliza los puntos de datos para que lo hagan. Entonces, aunque Ternary Plot es realmente bueno, no es una representación 100% precisa del espacio de color. Sin embargo, dado que el objetivo del ejercicio era producir algunos gráficos que despertasen el interés de STEAM, creo que cambiar un poco de precisión por impacto visual está bien...
Analíticamente, es posible agrupar los crayones en función de la similitud de sus colores mediante una agrupación jerárquica. Aquí, he mostrado el Parcela de constelación , que es mi forma favorita de ver un dendrograma, al ejecutar Hierarchical Clustering en las coordenadas del espacio RGB:
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 diagrama de constelación producido al realizar un agrupamiento jerárquico en los datos.
A partir de esto, puedo ver que hay entre 5 y 7 grupos de colores. Establecí el número de grupos en 5 y luego miré las parcelas paralelas. Las diferencias en los grupos se ven fácilmente, al igual que las similitudes dentro de los grupos. Me pareció interesante que los colores pastel y diurno se pusieran en sus propios grupos (grupos 2 y 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).Los colores pastel y diurno se colocaron en sus propios grupos (grupos 2 y 3).
Puede ver resultados similares con el script de agrupación en clústeres k-Means.
Posdata
Como siempre, volver a visitar algo después de dejarlo por un tiempo proporciona una nueva perspectiva. He revisado este conjunto de datos un par de veces desde que Jim se comunicó originalmente. ¿Qué puedo decir? Soy un nerd, y es un pequeño y divertido conjunto de datos para jugar. Primero, en el proceso de escribir esta publicación, me di cuenta de que hice este código mucho más complejo de lo que necesitaba. Toda la operación de coloreado se puede realizar con un solo Por cada fila() bucle. También puedo simplificar la codificación creando una lista y transformándola para obtener el conjunto de coordenadas que necesita JMP sin crear nuevas columnas.
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;
);
A continuación, me gustó mucho el diagrama ternario del conjunto de datos original de Jim (aparte de los problemas de precisión). Me hizo pensar en lo que sucedería si generara un ejemplo de relleno de espacio que trazara todas las combinaciones en el espacio RGB. El guión que se me ocurrió es bastante complejo. Lo subí a File Exchange como Asignación de espacio de color RGB si quieres echar un vistazo. De todos modos... la trama ternaria que produce es bastante impresionante. En retrospectiva, tal vez debería haber titulado esta publicación "El lado oscuro de la luna".
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.Esto es lo que sucedió cuando generé un ejemplo de relleno de espacio que trazó todas las combinaciones en el espacio RGB. Nota del editor: ¿Has leído el primera entrega de nuestra serie Engineering Mailbag ? Vea cómo Mike ayuda a un usuario que estaba usando JMP para decidir si contratar un servicio de remoción de nieve.
Una nota del autor
Para aquellos de ustedes que leen esto de nuevo, no, no están locos, el título cambió un poco.Recibí una solicitud para actualizar el título para que fuera más fácil de encontrar para nuestros motores de búsqueda.Solo puedo suponer que esto se debe a que algunos motores de búsqueda son encarnaciones modernas de bibliotecarios de referencia del siglo XIX sin sentido del humor.Disculpas por cualquier inconveniente.-METRO