Ich generiere einige Diagramme, die einen Hexadezimalwert für die Farben benötigen.
Beispiel:
Ich erstelle diese dynamisch, daher möchte ich den Hexadezimalcode für jede dataseries zufällig generieren.
Was ist der beste Weg, dies zu tun?
Ich generiere einige Diagramme, die einen Hexadezimalwert für die Farben benötigen.
Beispiel:
Ich erstelle diese dynamisch, daher möchte ich den Hexadezimalcode für jede dataseries zufällig generieren.
Was ist der beste Weg, dies zu tun?
Samuels Antwort ist der beste Weg, dies zu tun, stellen Sie einfach sicher, dass, wenn Sie die Farben innerhalb einer Schleife generieren, Sie nicht jedes Mal ein neues Random
-Objekt instanziieren, weil new Random()
den Generator mit der Systemuhr initialisiert. Ihre Schleife wird schneller laufen als die Uhr ticken kann, daher werden Sie immer wieder dieselben Farben generieren, weil random
mit dem gleichen Wert initialisiert wird.
Es sollte ungefähr so aussehen:
int numColors = 10;
var colors = new List();
var random = new Random(); // Stellen Sie sicher, dass dies außerhalb der Schleife steht!
for (int i = 0; i < numColors; i++)
{
colors.Add(String.Format("#{0:X6}", random.Next(0x1000000)));
}
anstatt:
int numColors = 10;
var colors = new List();
for (int i = 0; i < numColors; i++)
{
var random = new Random(); // Setzen Sie dies nicht hierhin!
colors.Add(String.Format("#{0:X6}", random.Next(0x1000000)));
}
Nur zufällige Farben sind meiner Meinung nach möglicherweise nicht bevorzugt, da man Farben benötigt, die für das menschliche Auge unterscheidbar sind.
Wie wäre es, wenn man eine bestimmte Anzahl von Farben festlegt und diese dann zufällig auswählt?
Vielleicht findest du bessere Antworten in einigen Open-Source-Diagrammbibliotheken.
Ein guter Weg, um eine schöne Farbpalette zu generieren, besteht darin, sie mit fester Sättigung und Helligkeit zu definieren und den Farbton zu variieren.
Dies ergibt eine schöne Farbpalette, die alle so aussehen, als kämen sie aus demselben "Set" - alle Pastellfarben, alle intensiv, alle gebrochenes Weiß, was auch immer. Und es ist ziemlich einfach zu codieren, wenn Sie Color.FromHSV() haben.
Es hört wahrscheinlich auf zu funktionieren, wenn Sie zu viele Farben haben, sie werden ununterscheidbar sein. Aber wahrscheinlich haben Sie dieses Problem sowieso.
In Pseudocode:
Sat = 0.5 * 255 //wenn wir den Bereich 0-255 wollen...
Helligkeit = 0.9 * 255
AnzahlDerFarben = 7
HueAbstand = 360 / 7
Farben = []
für (i = 0; i < AnzahlDerFarben; i++)
Farben.Add(Color.FromHSV(HueAbstand * i, Sat, Helligkeit)
oder
n = 7
Farben = [Color.FromHSV(x*360/n, 128, 230) for x in range(n)]
(Ich mag List Comprehensions...)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich habe gerade bemerkt, dass mein Beispiel nicht angezeigt wurde. Ich vermute, dass dies daran liegt, dass es sich um eine XML-Zeichenfolge handelte... Na ja, es war nicht wichtig, da die Antwort gut funktioniert hat.
1 Stimmen
@rahkim - Frage aktualisiert, um das zu beheben, und einen aussagekräftigeren Titel hinzugefügt