Wie finde ich eine geeignete Assoziation von Farbe mit Datenwert in einer Visualisierung?

8

Ich arbeite an einem Softwareprojekt, bei dem ein Visualizer für Hochwassersimulationen erstellt wird. Im Rahmen dieses Projekts habe ich einen Wassergradienten erstellt, der die Wassertiefe an bestimmten Punkten anzeigt. Um festzulegen, welche Werte welche Farben darstellen, gehe ich die Daten durch und erhalte die minimalen und maximalen Werte, die auftreten, und verteile die Farben gleichmäßig nach dieser Skala.

Es gibt jedoch häufig Zeitpunkte in diesen Simulationen, an denen sich deutlich tieferes Wasser befindet als anderswo in der Simulation. Dies führt dazu, dass die meisten Punkte auf der Karte sehr ähnliche Farben haben. Dies ist nicht sehr informativ und macht die Bereiche, in denen das Wasser tiefer ist, sehr schwer zu erkennen.

Mein Ziel ist es, Tiefen, die häufiger auftreten, eine größere Farbpalette zu widmen. Wenn beispielsweise die Tiefen von 0 bis 12 reichen, die meisten Tiefen jedoch zwischen 1 und 2 liegen, möchte ich, dass innerhalb dieses Bereichs mehr Farbabweichungen auftreten als zwischen 11 und 12 oder 4 und 5. Es scheint, dass ich die Standardabweichung oder verwenden muss Etwas, das eine normale Verteilung beinhaltet, um dies zu tun, aber ich bin ein bisschen unklar, wie diese Dinge funktionieren und wie ich sie verwenden kann, um mein Ziel zu erreichen.

Jede Hilfe, die zur Verfügung gestellt werden kann, wird geschätzt. Vielen Dank.

SethGunnells
quelle
Nicht positiv, verstehe ich richtig, aber wenn Sie stattdessen den Logarithmus Ihrer aktuellen Skala verwenden würden, würde er vielleicht besser aussehen. Haben Sie ein Bild, das Sie zeigen könnten?
Jerad

Antworten:

9

Es hört sich so an, als ob Sie jede Farbe in Ihrer Palette ungefähr der gleichen Datenmenge zuordnen möchten.

Zur Veranschaulichung ist hier ein Histogramm eines Satzes von simulierten Tiefenmesswerten:110

Histogramm

Stellen Sie sich vor, dies wäre geglättet. Auf diese Weise könnte das Histogramm gleichmäßig in vertikale Segmente gleicher Fläche geschnitten werden, wobei so viele Schnitte verwendet werden, wie Sie möchten (ich habe in diesem Beispiel Teile verwendet ). Um die Flächen gleich zu halten, müssen die Schnitte dort dünn sein, wo sich das Histogramm befindet hoch - das heißt, wo es viele Daten gibt - und fett, wo das Histogramm niedrig ist - das heißt, wo es wenig Daten gibt.10

Kerndichte, in Scheiben geschnitten

Eine Möglichkeit, das Schneiden einfach durchzuführen, besteht darin, die Gesamtdatenmenge ("kumulativer Anteil") gegen die Tiefe zu zeichnen. Schneiden Sie die vertikale Achse in gleichmäßige Intervalle und lesen Sie dann die Tiefen ab, in denen die Schnitte das Diagramm kreuzen: Verwenden Sie diese als Schnittpunkte für die Visualisierung der Tiefen.

CDF

Der Algorithmus zum Berechnen der Schnittpunkte aus den Daten sollte offensichtlich sein und ist in fast jeder Programmiersprache einfach zu schreiben: Sortieren Sie die Werte, teilen Sie die Liste in Gruppen von ungefähr gleicher Größe auf und wählen Sie Schnittpunkte, um den größten Wert in jeder Gruppe von der zu trennen kleinster Wert in der Gruppe, die ihm folgt.

whuber
quelle
2
Brillant. Dies ist genau das, was ich wollte und es ist viel einfacher als ich erwartet hatte. Vielen Dank, dass Sie mein Problem geklärt und eine elegante Lösung gefunden haben.
SethGunnells
10

Obwohl die Antwort von @ whuber genau das liefert, was Sie gefragt haben, möchte ich Sie darauf hinweisen, dass das, was Sie fragen, aus zwei Gründen möglicherweise nicht die beste Möglichkeit ist, Ihre Daten visuell darzustellen.

  1. Die Betrachter gehen natürlich davon aus, dass die Farben gleichmäßig nach Wert (Tiefe) und nicht nach Rang verteilt sind. Sie müssen hart mit Ihrer Beschriftung arbeiten, damit das kognitive Gehirn des Betrachters außer Kraft setzt, was sein visuelles System ihm sagt.
  2. Der Rang ist für Ihre Zuschauer möglicherweise nicht wichtiger als die tatsächliche Tiefe. Wenn es beispielsweise viele Werte zwischen 0 und 1 gibt, spielt es dann eine analytische Rolle, wie diese Werte verteilt sind?

Sie kennen Ihre Anwendung natürlich am besten, daher kann ich nicht sagen, wie die richtige Antwort lautet. Im Folgenden finden Sie einige Alternativen, bei denen Daten verwendet werden, die von generiert wurden

r = Sqrt((:x * :x + :y * :y) / 400);
t = ArcTan(:y, :x);
z = (12 * Exp(-r * r * 3)) * Abs(Sin(2 * Pi() * r) - r * Cos(3 * t))

Die Daten gehen von 0 bis 12,5 mit der folgenden Verteilung:

Histogramm

Ein 3-D-Oberflächendiagramm zeigt einige Gipfel, einen flachen Trog und einen kleinen Hügel:

Oberflächenplot

Schauen wir uns nun einige 2D-Konturdiagramme an.

Gerade lineare Farbzuordnung, bei der die kleineren Funktionen fehlen, wie Sie bemerkt haben:

lineare Farbabbildung

Wenn die Variation in den tiefen Bereichen unwichtig ist, ermöglicht das Abschneiden der Farbzuordnung mehr Farben für die kleineren Tiefen, während eine lineare Zuordnung in diesem Bereich beibehalten wird:

abgeschnittene lineare Farbzuordnung

Zum Vergleich hier die rangfarbene Ansicht (sorry, dass meine Legende in Rangwerten statt in Tiefenwerten steht):

Rang Farbzuordnung

Ich bin mir nicht sicher, ob dies eine gute Darstellung für Ihre Bewerbung ist oder nicht. Das Detail im flachen Trog ist übertrieben. Eine Log - Farbzuordnung ist ähnlich und hat die Vorteile, die eine reale Interpretation und können über Datensätze, aber log ist noch nicht wahrnehmbare (Entschuldigungen wieder für die Legende) im Einklang stehen:

Protokollfarbzuordnung

Schließlich ist hier ein Ansatz in eine etwas andere Richtung, der mit einem der oben genannten kombiniert werden kann, um die Auflösung zu erhöhen: eine mehrfarbige Farbzuordnung. In diesem Fall ist die Färbung linear und abgeschnitten:

doppelt abgeschnitten linear

Ein Ansatz, den meine Software nicht ohne Weiteres zulässt, ist die Verwendung einer mehrfarbigen, stückweisen linearen Farbzuordnung, die ich in einigen Höhenkarten gesehen habe. Zum Beispiel sind die niedrigen Höhen Grüns in Schritten von 50 Fuß, die mittleren Höhen sind Bräune in Schritten von 200 Fuß und die Höhen sind Grautöne in Schritten von 800 Fuß.

Fazit : Es ist besser, wenn das Gehirn des Betrachters mit Ihrem visuellen Wahrnehmungssystem arbeitet, als dagegen.

xan
quelle
1
Danke für die Antwort. Ich habe die Antwort von whuber implementiert und festgestellt, dass sie, wie Sie erwähnt haben und wie ich erwartet hatte, eine Grafik erzeugt hat, die sehr trügerisch und in Bezug auf die tatsächliche Tiefe nicht sehr intuitiv ist. Ich denke, die Lösung, für die ich mich entschieden habe, besteht darin, einen schärferen Kontrast zwischen "flachen" Farben und "tiefen" Farben herzustellen, damit ich einen gleichmäßigen und intuitiven Farbverlauf beibehalten und dem Benutzer dennoch das Erkennen potenzieller Problembereiche erleichtern kann.
SethGunnells
2
Blues ist in vielen Fällen eine besonders gute Wahl, da das menschliche visuelle System viel empfindlicher auf Farbtonschwankungen in dieser Region reagiert.
Kardinal
2
@cardinal: Solange deine Beobachter jünger sind. Mit zunehmendem Alter geht die Empfindlichkeit für kurze Wellenlängen verloren (z . B. ncbi.nlm.nih.gov/pubmed/3230483 ).
Russellpierce