Servus, Ich bastel gerade an einem kleinen Tool zur Darstellung von Messreihen. Wenn ich mit Programmen wie Matlab Diagramme mit mehreren Kurven plotte, haben diese ja in der Regel unterschiedliche, gut unterscheibare Farben. Hat jemand eine Ahnung wie diese Farben festgelegt werden? Wird da einfach aus einer definierten Liste ausgewählt, oder gibt es einen Algorithmus, der Farben mit möglichst großer "optischer Distanz" berechnet? Gruß
Hallo, ich weiss zwar nicht wie es Matlab macht aber an deiner Stelle würde ich mir ein paar Farben definieren, die man gut unterscheiden kann und diese in einer Tabelle/ Array oder was auch immer speichern. Mehr als 10 Farben brauchst du bestimmt nicht, da es sonst sehr unübersichtlich wird. Berechnen würde ich da nichts, obwohl das in manchen Farbräumen recht einfach ist ( bsp HSV-farbraum ).
Befass' dich mal mit dem HSB-Farbsystem. B steht für "brightness" (Helligkeit), S für "saturation", Sättigung (volkstümlich auch "Reinheit" der Farben. Die Farbe selbst legst du über einen Wert H ("hue") von 0 bis 360 (im Modell entlag eines Kreisumfanges) fest. Es beginnt bei 0 Grad mit Rot, dann folgen in je 60 Grad-Schritten die weiteren Grundfarben, also 60=Gelb, 120=Grün, 180=Cyan, 240=Blau, 300=Magenta, 360=0=Rot, natürlich mit allen Zwischenstufen. Wenn du also 20 Messwerte hast, telst du einfach den Bereich von 0 bis 300 in 20 Abschnitte und du hast maximal Farbdistanz ...
Es gibt, in Wahrheit, nur sehr wenig gut unterscheidbare Farben. Ganz wichtig, wenn man auch noch Drucken will. Die meisten Programme verwenden hierfür einfach Tabellen. Die komfortablen (komplizierten) lassen aber dem Anwender noch die Möglichkeit diese Umzudefinieren. Allerdings spielen hierbei auch sehr oft die Gewohnheit und der Geschmack eine Rolle. Zwei einfache Beispiele: Dein Lieblingshintergrund ist schwarz. Die Beste Zeichenfarbe ist dabei aber weiß. Sieht nicht so toll beim Ausdruck aus, obwohl die Druckerhersteller es gerne sehen würden, wenn Du den gesamten Ausdruck schwärzen würdest. Am Monitor ist Gelb, als Linienfarbe, relativ gut sichtbar. Auf weißem Papier ist aber Schluss mit Lustig. Langer Rede, kurzer Sinn: Implementiere 2 Farbtabellen und las' dem Anwender die Möglichkeit weiße Linien auf weißem Grund zu produzieren.
matlab hat auch eingebaute colormaps, mit denen habe ich bisher ganz gute erfahrungen gemacht
Kannst ja mal in den Quelltext von Beitrag "Re: Visualisierung von geloggten Daten" (Funktion FileOpen)schauen, dort ist es so gelöst, das der Farbkreis durch die Anzahl der Kanäle geteilt wird und die Farben damit initialisiert werden (maximale Sättigung). mfG vom ingo
Danke nochmal für die Antworten. Ich werds jetzt so machen, dass ich eine Tabelle nehme, die am Anfang automatisch befüllt wird. Dafür variiere ich wie vorgeschlagen den H-Wert. Allerdings nehme ich für Aufeinanderfolgende Graphen natürlich nicht benachbarte Werte (sonst wäre die Unterscheidung ja bereits bei zwei Graphen schlecht), sondern ich mache mehrere Umläufe nach dem Schema 0, 120, 240, 60, 180, 30, 90, 150, 210, 270, 330, ... Klar, dass man da irgendwann nichts mehr unterscheiden kann, aber wenn der Anwender 100 Graphen darstellen möchte, ist das seine Sache :-) Man könnte natürlich auch noch den Linien-Stil variieren...
pks schrieb: > Allerdings nehme ich für > Aufeinanderfolgende Graphen natürlich nicht benachbarte Werte hmm, bei beispielsweise zwei graphen wäre dan der abstand 180°, das kann man doch super auseinanderhalten (wenn man die entsprechenden farben als farben anerkennt). ich würde bis zu einem vorher festgesetzten grenzwert einfach die 360 durch die anzahl der graphen teilen (maximaler farbabstand). wenn der grenzwert unterschritten wird (hausnummer 45° -> 8 farben), danach anfangen mit dem linienstil zu variieren (5 möglichkeiten?, das wären dann immerhin schon 40 linien bei 8 farben), danach kann man noch mit den markern anfangen zu spielen (10 möglichkeiten?, das wären dann in summe 400 linien). aber bei 400 linien kannst du auch anfangen, einfach nur irgendwelche "kunst" zu drucken ;-)
Daniel F. schrieb: > ich würde bis zu einem vorher festgesetzten grenzwert einfach die 360 > durch die anzahl der graphen teilen (maximaler farbabstand). und wenn man einen graphen jinzufügt, ändern sich die Farben der bisher vorhandenen. Hast du das schon mal in einem Tool gesehen? Ich würde einfach eine Reihe (16?) von handerstellten, vom Benutzer aber umkonfigurierbaren Linienstilen vordefinieren und die zyklisch wiederholen, wenn der benutzer tatsächlich mehr Kurven hat. Das ist imho das gewöhnliche vogehen, was man sonst überall sieht.
@pks Natürlich kannst Du so viele Farben wie möglich in Farbtabellen einbauen, oder sogar Automatismen dafür entwickeln, aber vergiss’ dabei nicht die Praxis. Außer Herrn Farbenfroh wird wohl kaum jemand mehr als 10 bis 15 Farben oder Unterscheidungsmerkmale in EINE Grafik einbauen. Wenn die Grafik nämlich auf Fingernagelgröße reduziert werden muss, weil nicht nur Buntheit, sondern auch noch Klarheit (Legende) herrschen muss, wird die Sache absurd. Etwas anderes sind Flächengrafiken, die z.B. Temperaturverläufe wiedergeben sollen. Hier können schon mal (rechnerisch) 255 Farben ausgegeben werden, aber hier werden im Allgemeinen ein oder zwei gut sichtbare Basisfarben in ihrer Helligkeit variiert. Dafür wird normalerweise aber keine Farbtabelle verwandt.
Daniel F. schrieb: > ich würde bis zu einem vorher festgesetzten grenzwert einfach die 360 > durch die anzahl der graphen teilen (maximaler farbabstand). wenn der > grenzwert unterschritten wird (hausnummer 45° -> 8 farben), Die letzten 60 Grad würd' ich lassen, da gehts von Magenta zu Rot zurück und das hatten wir schon in den ersten 60 Grad :-))
pks schrieb: > oder gibt es einen > Algorithmus, der Farben mit möglichst großer "optischer Distanz" > berechnet? Ich habe das immer so gemacht, dass ich die Bits der Farbnummer nach folgendem Schema auf die Bits des RGB-Wertes aufteile: Bit (0=LSB) -> RGB / Bit 0 -> R/7 1 -> G/7 2 -> B/7 3 -> R/6 4 -> G/6 5 -> B/6 6 -> R/5 7 -> G/5 8 -> B/5 9 -> R/4 10-> G/4 11-> B/4 12-> R/3 13-> G/3 14-> B/3 15-> R/2 ... und so weiter, je nachdem wie weit der Index gehen soll. Eventuell noch R/G/B nach eigenem Geschmack tauschen und die Bits am Ende noch invertieren, je nach Hintergrundfarbe.
(Ich fand das recht nützlich beim Debuggen von 3D-Grafik-Programmen, die Objekte anhand ihrer ID nach obiger Methode einzufärben, da kann man alles gut auseinanderhalten.)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.