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.)Wie kann man mit JMP die RGB-Farbkoordinaten von Buntstiften auf interessante Weise darstellen? (Bildrechte: James A. Alloway, Jr. Verwendung mit Genehmigung.)
Der technische Postsack
Folge 2: Ich sehe dein wahres Gesicht
Hin und wieder stoßen JMP-Systemingenieure auf interessante Fragen, die etwas außerhalb des typischen Spektrums liegen JMP Verwendung. Diese Anwendungen sind im Allgemeinen clever und machen deutlich, dass die Nutzung von Daten nicht nur für geschäftliche oder technische Probleme gedacht ist. Unten ist ein Beispiel eines anderen Kollegen aus dem Bundesstaat New York, von dem ich dachte, dass es Spaß machen würde, es zu teilen.
Jim versuchte im Rahmen einer ehrenamtlichen Arbeit, die Daten von 150 Crayola-Buntstiften zu analysieren. Er hoffte, den Schülern coole Datenvisualisierungen zeigen zu können, die ihr Interesse an STEAM (Wissenschaft, Technologie, Ingenieurwesen, Kunst & Design und Mathematik) wecken würden.
Die Frage
Hallo Mike [JMP],
Endlich habe ich eine Frage an Sie. Ich erstelle einen Datensatz für eine STEAM-Präsentation. Für den Teil „Kunst und Design“ habe ich Daten zu Crayola-Buntstiften (150 Reihen). Ich versuche, ein ternäres Diagramm mit den Farbkoordinaten (R, G,
zu erstellen, die ich für jede Zeile (Farbe) habe. Ich kann den Plot problemlos erstellen, aber ich möchte, dass jede Markierung auf dem Plot die tatsächliche Farbe hat, die in jeder Zeile dargestellt wird. Ich konnte dies manuell tun, aber ich gehe davon aus, dass es einen einfacheren Weg geben muss (ohne ein Skript schreiben zu müssen).
Für Hinweise in diese Richtung wäre ich dankbar! (An dieser Stelle besteht keine Eile.)
Danke.
Jim [Benutzer]
Meine Antwort
Probieren Sie es aus.
Nun ja … das war ein informativer Austausch, nicht wahr?
Dies ist ein Beispiel für einen dieser seltenen Fälle, in denen es nur eine Möglichkeit gibt, es jemandem zu zeigen Wie etwas tun heißt tatsächlich tun es für sie. Im Allgemeinen bin ich kein Fan davon, aber manchmal ist das der beste Weg. Und ja, in diesem Fall ist die Antwort ein Skript. Nehmen wir uns einen Moment Zeit und gehen wir die Daten und das, was ich getan habe, durch. Die von Jim bereitgestellten Daten (verfügbar Hier ) sieht aus wie das:
Jim's original data tableJim's original data tableJim's original data tableJim's original data tableJims Originaldatentabelle
Was wir sehen, sind Spalten für den Namen des Buntstifts und die HSV-RGB-Koordinaten für diese Farbe. Ich habe die HSV-Koordinaten für meine Lösung nicht wirklich verwendet. Jim möchte einen Weg finden, dem Zeilenstatus programmgesteuert eine Farbe zuzuweisen entspricht der durch die RGB-Koordinaten beschriebenen Farbe . (Wenn das kompliziert klingt, warten Sie einfach – es ist nicht so schlimm.) Hier ist die Datentabelle, die ich zurückgeschickt habe:
My data tableMy data tableMy data tableMy data tableMeine Datentabelle
Beachten Sie die Tabellenskripte, die ich eingefügt habe (neben den grünen Pfeilen links). Im ersten Fall passiert die Magie. Die anderen sind einige lustige Analysen, über die ich später sprechen werde.
Nun, kitzle mich rosa!
Schauen wir uns zunächst dieses Färbegeschäft an. Je nachdem, was Sie tun möchten, JMP erfordert eine andere Formatierung der RGB-Koordinaten. Für die Arbeit mit den Zellenfarben (den Hintergründen der Farbnamen in den Spalten) und den Zeilenzustandsfarben muss RGB zwischen 0 und 1 skaliert werden. Da ich bei meiner Arbeit versucht habe, transparent zu sein, habe ich eine Reihe von Spalten (Rot, Grün, Blau) erstellt, um die RGB-Koordinaten von der 8-Bit-Farbskala (0-255) auf einen Wert zwischen 0 und 1 neu zu skalieren . Das Tabellenskript „Farbzellen“ führt dann zwei Dinge aus. Zuerst geht es jede Zeile mit a durch Für jede Reihe() Schleife und die :Color Name << Farbzellen() Nachricht zum Festlegen der Zellenfarben. Dann habe ich wiederum aus Gründen der Transparenz (und wahrscheinlich weil ich das über ein paar Tage hinweg gemacht habe – ich kann mich ehrlich gesagt nicht erinnern, welchen) einen zweiten Schritt verwendet, der Folgendes beinhaltet: Für() Schleife, um die Zeilenzustände mithilfe der von mir erstellten Spalten festzulegen.
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;
);
Durch das Ausführen dieses Skripts wird die farbenfrohe Tabelle erstellt, die ich an Jim zurückgeschickt habe.
Obwohl diese Tabelle recht farbenfroh ist, erfordert die Verwendung dieser Art von Daten wirklich einige aussagekräftige Visualisierungen. Da RGB ein ternärer Koordinatenraum ist, scheint ein Ternary Plot ein geeigneter Ausgangspunkt zu sein:
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.Ein ternärer Plot ist ein guter Ausgangspunkt.
Die Zeilenzustandsfärbung liefert ein klares Bild davon, wo sich jeder Buntstift im RGB-Farbraum befindet. Ich sollte auch darauf hinweisen, dass es ein kleines Problem gibt Vorbehalt Emptor zur Verwendung von Ternary Plots für diese Anwendung. Streng genommen erwartet die Ternary Plot-Plattform, dass die drei für jede Koordinate bereitgestellten Werte in der Summe 1 ergeben. Wenn die bereitgestellten Daten dieses Kriterium nicht erfüllen, werden die Datenpunkte entsprechend normalisiert. Obwohl der Ternary Plot wirklich ordentlich ist, ist er keine 100 % genaue Darstellung des Farbraums. Da es bei der Übung jedoch darum ging, einige Grafiken zu erstellen, die das STEAM-Interesse wecken würden, halte ich es für in Ordnung, ein wenig Genauigkeit gegen visuelle Wirkung einzutauschen …
Analytisch gesehen ist es mithilfe einer hierarchischen Clusterbildung möglich, die Buntstifte basierend auf der Ähnlichkeit ihrer Farben zu gruppieren. Hier habe ich das gezeigt Konstellationsplot , was meine bevorzugte Art ist, ein Dendrogramm zu betrachten, indem ich hierarchisches Clustering auf den RGB-Raumkoordinaten ausführe:
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.Ein Konstellationsdiagramm, das durch hierarchisches Clustering der Daten erstellt wird.
Daraus kann ich ersehen, dass es zwischen 5 und 7 Farbgruppen gibt. Ich habe die Anzahl der Cluster auf 5 gesetzt und mir dann die Parallelplots angesehen. Die Unterschiede in den Clustern sind leicht zu erkennen, ebenso wie die Ähnlichkeiten innerhalb der Cluster. Interessant fand ich, dass die Pastell- und Tagesleuchtfarben in eigene Cluster (Cluster 2 und 3) eingeteilt wurden.
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).Die Pastell- und Tagesleuchtfarben wurden in eigene Cluster (Cluster 2 und 3) eingeteilt.
Ähnliche Ergebnisse können Sie mit dem k-Means-Clustering-Skript sehen.
Nachtrag
Wie immer bietet es eine neue Perspektive, etwas noch einmal zu betrachten, nachdem man es für eine Weile aus der Hand gelegt hat. Ich habe diesen Datensatz ein paar Mal überprüft, seit Jim sich ursprünglich gemeldet hat. Was kann ich sagen? Ich bin ein Nerd und es ist ein lustiger kleiner Datensatz, mit dem man spielen kann. Während ich diesen Beitrag schrieb, wurde mir zunächst klar, dass ich diesen Code viel komplexer gemacht hatte, als nötig war. Der gesamte Färbevorgang könnte mit einem einzigen durchgeführt werden Für jede Reihe() Schleife. Ich kann die Codierung auch vereinfachen, indem ich eine Liste erstelle und die Liste transformiere, um den Koordinatensatz zu erhalten, den JMP benötigt, ohne neue Spalten zu erstellen.
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;
);
Als nächstes hat mir der Ternary Plot aus Jims Originaldatensatz sehr gut gefallen (abgesehen von den Genauigkeitsproblemen). Ich habe darüber nachgedacht, was passieren würde, wenn ich ein raumfüllendes Beispiel generieren würde, das alle Kombinationen im RGB-Raum abbilden würde. Das Skript, das ich mir ausgedacht habe, ist ziemlich komplex. Ich habe es auf den Dateiaustausch hochgeladen als RGB-Farbraumzuordnung wenn du mal reinschauen willst. Unabhängig davon ist die Ternary Plot, die daraus entsteht, ziemlich beeindruckend. Im Nachhinein hätte ich diesen Beitrag vielleicht „Dunkle Seite des Mondes“ nennen sollen.
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.Dies geschah, als ich ein raumfüllendes Beispiel generierte, das alle Kombinationen im RGB-Raum abbildete. Anmerkung der Redaktion: Hast du das gelesen? erster Teil unserer Engineering Mailbag-Reihe ? Sehen Sie, wie Mike einem Benutzer hilft, der verwendet hat JMP um zu entscheiden, ob Sie sich für einen Schneeräumdienst anmelden möchten.
Eine Anmerkung des Autors
Für diejenigen unter Ihnen, die das noch einmal lesen: Nein, Sie sind nicht verrückt, der Titel hat sich ein wenig geändert.Ich habe eine Anfrage erhalten, den Titel zu aktualisieren, damit er für unsere Suchmaschinen leichter zu finden ist.Ich kann nur vermuten, dass das daran liegt, dass einige Suchmaschinen moderne Inkarnationen von Referenzbibliothekaren des 19. Jahrhunderts ohne Sinn für Humor sind.Bitte entschuldigen Sie die Unannehmlichkeiten.-M