2009-01-30 9 views
5

Ich habe eine Liste numerischer Werte. Ich kann die Werte bei Bedarf normalisieren.Zuordnung einer Liste von numerischen Werten zu Farben

Ich muss diese Liste in eine Liste von Farben umwandeln (in HSL, RGB oder jedem anderen Farbmodell — kann ich immer später Umwandlung durchführen).

Für jeden gegebenen Wert muss die Farbe jedes Mal gleich sein.

Je unterschiedlicher zwei numerische Werte sind, desto mehr Kontrast sollten die entsprechenden Werte sein.

Alle verwendeten Farben müssen so kontrastreich wie möglich sein (dies ist eine weiche Einschränkung, grobe Lösung).

Beachten Sie, dass die Liste ziemlich groß ist (Tausende von Zahlen), also würde das einfache Zusammendrücken aller Zahlen in einen einzigen Farbkanal zu dichte Ergebnisse liefern.

Antwort

2

Sie können einen 3D space-filling curve über den von Ihnen gewählten Farbraum verwenden. Ich werde den zweiten Vorschlag von Mark CIELAB ankreuzen, ich wünschte, ich hätte das letzte Mal gewusst, dass ich ein ähnliches Problem lösen musste.

0

Warum nicht Graustufen verwenden? Berechnen Sie einfach die Min/Max-Werte und verwenden Sie diese, um jede Zahl in einen anderen Farbton von Weiß zu Schwarz zu übersetzen.

Ich weiß, es sind keine Farben, aber meiner Meinung nach wird es einfacher sein, die Ergebnisse zu interpretieren. Ich kann sagen, was es bedeutet, wenn etwas dunkler oder heller ist, aber wer sagt beispielsweise, dass Grün ein höherer Wert als Orange ist?

+0

Er will wahrscheinlich absolute Unterschiede, nicht höhere/niedrigere Differenzen. 1, 10 und 100 wären vielleicht rot, rot-orange und cyan. – strager

+0

Es gibt zu viele Zahlen (vielleicht tausend), so dass Graustufen zu nahe beieinander liegen würden. –

1

See: How to automatically generate N "distinct" colors?

Es wäre am besten Ihre Werte zu normalisieren, und sie durch den Code ausführen, schlug ich vor (wo Farbton == Ihr Wert), den Aufbau einer Karte/Hash. (Sie können stattdessen eine Hash-Funktion verwenden, die wahrscheinlich effizienter ist.)

Sie können beispielsweise Helligkeit (oder Helligkeit, abhängig von Ihrem Modell) und Sättigung mit bestimmten Bits Ihrer Zahl "randomisieren".

2

Welchen Algorithmus Sie auch immer anwenden, können Sie den CIELAB Farbraum versuchen. Es normalisiert die Unterschiede in der menschlichen Farbwahrnehmung, so dass gleiche numerische Abstände gleiche Wahrnehmungsunterschiede ergeben.

Verwandte Themen