2010-07-16 4 views
3

Existe-t-il un bon algorithme pour générer des couleurs à utiliser dans les graphiques tels que les graphiques linéaires/à secteurs/à barres? Pratiquement tous les graphiques ont une liste intégrée de couleurs qu'ils affectent automatiquement aux éléments qui y sont ajoutés. Mais parfois, vous devez assigner manuellement les couleurs vous-même, et dans ce cas, vous voudrez éviter d'insérer vous-même des couleurs, ce qui prend du temps et aura probablement de mauvais résultats, alors qu'un algorithme pourrait probablement le faire beaucoup mieux.Existe-t-il des algorithmes générateurs de couleurs?

Les couleurs générées doivent avoir les propriétés suivantes:

  • être facilement différentiables les uns des autres: comme de plus en plus d'éléments sont ajoutés la probabilité de confusion et de miss-interprétation augmente. Il est donc important que les couleurs soient aussi facilement discernables que possible, en particulier les couleurs proches les unes des autres dans la liste des couleurs. Les conflits sont acceptables, mais évidemment de préférence évités.

  • contiennent des couleurs classiques première: lorsque quelques éléments sont présents dans un graphique, les couleurs rouge, bleu, darkorange, vert, gris devrait de préférence venir en premier, et les moins facilement perceptibles après.

Actuellement, je suis en utilisant simplement une liste des couleurs que je trouve quelque part, et si j'ai plus d'éléments que la liste des couleurs, la liste est réutilisée, ce qui entraîne parfois dans des collisions de couleurs.

$default_colors = array(
    "#4684ee", "#dc3912", "#ff9900", "#008000", "#666666", 
    "#4942cc", "#cb4ac5", "#d6ae00", "#336699", "#dd4477", 
    "#aaaa11", "#66aa00", "#888888", "#994499", "#dd5511", 
    "#22aa99", "#999999", "#705770", "#109618", "#a32929", 
); 

Existe-t-il une telle fonction? J'ai regardé mais mon google-fu n'était pas assez fort.

+1

Ma propre opinion serait qu'une liste de couleurs est la voie à suivre. De cette façon, vous avez un contrôle complet sur les couleurs qui sont choisies. Si votre liste de couleurs a, disons, 24 membres, cela devrait être beaucoup plus que ce dont vous avez jamais besoin - un graphique qui dépend de la différentiabilité de 25 couleurs a de sérieux problèmes. –

Répondre

2

Travailler avec l'espace colorimétrique HSV est probablement la solution. Au sommet de ma tête, voici un algorithme possible que vous pourriez modifier selon vos goûts.

  • laissez-N le nombre de couleurs que vous avez besoin
  • let v = ceil (N/6) le nombre de valeurs différentes qui seront utilisées
  • let h = min (N, 6) soit le nombre de teintes différentes qui sera utilisé
  • utiliser des valeurs
    1, 1-1/v, ..., 1 - (v-1)/v
    chacune avec des teintes
    0, 1/h , ..., (h-1)/h

Ceci vous donne h * v différentes couleurs, échantillonne l'espace colorimétrique à saturation totale avec une distribution assez uniforme, reste le plus longtemps possible à l'écart des couleurs foncées et affiche les couleurs primaires en premier.

Si vous avez besoin de plus de couleurs, vous pouvez également incorporer la saturation.