2012-10-15 3 views
1

Je dessine des graphiques avec Microsoft Chart Controls et j'essaie de générer différentes couleurs pour chaque ligne du graphique (jusqu'à environ 15-20 couleurs). S'il y a 14 lignes à dessiner, je veux créer une couleur différente pour chacune d'entre elles.Création de couleurs étendues

Maintenant, je l'ai essayé avec l'aide de HSV:

private Color GetSeriesColor(int seriesIndex, 
          int seriesCount) 
{ 
    return ColorHelper.FromHsv(360.0*seriesIndex/seriesCount, 1, 1); 
} 

Le problème est cependant que les couleurs vert et bleu sont très similaires:

enter image description here

Y at-il une manière C# pour créer x couleurs qui semblent différentes à un humain?

Répondre

1

Vous pouvez essayer des pointeurs doubles, chacun pointant vers un endroit différent dans le spectre. Au moins, de cette façon, vous vous retrouveriez avec des couleurs alternées.

private Color GetSeriesColor(int seriesIndex, 
           int seriesCount, 
           int steps) { 
    return ColorHelper.FromHsv( 
     (360.0/steps) * (1.0 * seriesIndex/seriesCount) + 
     ((seriesIndex % steps) * (360.0/steps)), 
     1, 1); 
} 

Indicatif téléphonique:

GetSeriesColor(5, 18, 2); 

Cela va créer deux "pointeurs". Le premier commencera à la position 0, le second à la position 180. La fonction alternera entre les deux pointeurs, donnant une sorte de "damier" au graphique. Si vous n'aimez pas l'effet, votre meilleur pari pourrait être une palette de couleurs (stockée dans un tableau) avec x nombre de couleurs prédéfinies, en boucle lorsque vous avez atteint la fin (ou l'ajout éventuel d'ombrage, tels que des couleurs plus foncées à des couleurs plus claires).

EDIT
Je vais ajouter, cependant, que l'utilisation d'un code couleur est pêle-mêle souvent un choix de mauvaise conception. Vous feriez mieux d'utiliser des étiquettes directement sur le graphique, si possible. Au-delà de 8 couleurs, l'œil humain commence à avoir du mal à se différencier. Voir https://ux.stackexchange.com/questions/17964/how-many-visually-distinct-colors-can-accurately-be-associated-with-a-separate.

+0

J'ai essayé votre code. Et le problème est plus ou moins le même. Avec 15 couleurs, les deux rouges ressemblent beaucoup et les verts sont encore difficiles à séparer. Une palette de couleurs personnalisée est une bonne idée bien sur, je peux en faire une avec 20 couleurs et en finir avec elle. Pourtant, je suis curieux de savoir s'il existe un moyen de l'automatiser. – Carra

+0

Voir la réponse mise à jour avec le lien. – JDB

+0

Un problème que vous n'avez pas abordé est le daltonisme, qui affecte environ 11% des hommes. Il est possible que 1 utilisateur sur 10 de vos utilisateurs potentiels ne puisse pas distinguer entre le vert et le rouge, et encore moins entre le vert clair et le vert légèrement plus clair. – JDB

Questions connexes