2010-07-16 2 views
3

Есть ли хороший алгоритм для генерации цветов для использования в графиках, таких как линейные/пивные/гистограммы? Практически все графики имеют встроенный список цветов, которые они автоматически присваивают элементам, добавленным к нему. Но иногда вам нужно вручную назначать цвета самостоятельно, и в этом случае вы захотите не вручную вставлять цвета самостоятельно, что отнимает много времени и, вероятно, будет иметь плохие результаты, тогда как алгоритм, вероятно, может сделать это намного лучше.Существуют ли алгоритмы генерации цвета?

Цвета, генерируемые должны обладать следующими свойствами:

  • легко дифференцируемое друг от друга: как все больше и больше элементов добавляются вероятность путаницы и ошибок-интерпретация поднимается. Поэтому важно, чтобы цвета были максимально легко различимы друг от друга, особенно цвета, близкие друг к другу в списке цветов. Конфликты приемлемы, хотя, очевидно, их желательно избегать.

  • Содержат первые классические цвета: когда несколько элементов присутствуют в виде графика, красный, синий, darkorange, зеленый, серый цвета предпочтительно должен прийти первым, и менее легко различимы те после.

В настоящее время я просто используя список цветов, я нашел где-то, и если у меня есть больше элементов, чем в списке цветов, список повторно, в результате чего иногда в цветовых коллизий.

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

Есть ли такая функция там? Я посмотрел, но мой google-fu не был достаточно сильным.

+1

Мое собственное мнение было бы в том, что список цветов - это путь. Таким образом, вы полностью контролируете, какие цвета выбраны. Если в вашем списке цветов есть, скажем, 24 члена, это должно быть намного больше, чем вам когда-либо понадобится - график, который зависит от различимости 25 цветов, имеет серьезные проблемы. –

ответ

2

Работа с цветовым пространством HSV - это, вероятно, путь. В верхней части моей головы, это возможный алгоритм, который вы можете изменить в соответствии со своими вкусами.

  • Пусть N будет количество цветов, которые вам необходимо
  • Пусть V = CEIL (N/6) число различных значений, которые будут использоваться
  • Пусть H = мин (N, N 6) быть количество различных оттенков, которые будут использоваться
  • использовать значения
    1, 1-1/V, ..., 1 - (v-1)/V
    каждый с оттенками
    0, 1/ч , ..., (h-1)/h

Это дает вам цвета h * v, образцы полного насыщенного цветового пространства с довольно равномерным распределением, остаются как можно дольше от темных цветов и вначале сочетаются с первичными цветами.

Если вам нужно еще больше цветов, вы можете включить насыщение.

Смежные вопросы