Я рекомендую использовать цветовые пространства HSV или HSL, а не цветовое пространство RGB, потому что HSV и HSL лучше структурированы для создания цветов, которые отличаются от людей. У вас будет больше работы в RGB (хотя конверсии туда и обратно существуют, если они вам понадобятся).
Вот как выглядит HSV / HSL:
При использовании цветового пространства HSV или HSL вы можете предположить (очень приблизительно), что разница между компонентами H (оттенка) двух цветов является хорошим приближением к воспринимаемому расстоянию между цветами - т.е. чем больше изменение оттенка, тем больше разные цвета будут смотреться на людей. Вы также можете попробовать поиграть с S (насыщенность) и L / V (яркость / значение), чтобы получить еще несколько очень разных цветов, но они не будут выглядеть такими же разными при одинаковом изменении значения, как при изменении оттенка.
В зависимости от количества нужных вам разных цветов, вы можете разделить пространство оттенков на это количество разных цветов. Если, например, у вас есть диапазон оттенков 256 значений и вам требуется 16 различных цветов, то ваш первый цвет может быть (0, 128, 128), ваш второй (16, 128, 128) и так далее. Я несколько произвольно выбрал средние значения S / L здесь, так как они обычно будут достаточно легкими и насыщенными, чтобы ясно видеть цветовые различия. Эта система проста и предполагает, что вам не нужно ничего знать о смежности цветов на графике / карте.
Если вы заранее не знаете, сколько разных цветов вам нужно, но знаете верхний предел, и деление диапазона оттенков на цвета с учетом этого верхнего предела, как указано выше, дает хорошие воспринимаемые цвета, вы можете использовать ту же систему с верхний предел.
Если вам (может) понадобится очень много разных цветов, вы все равно можете избежать использования очень похожих или даже одинаковых цветов, если они не отображаются рядом с другими элементами графика, которые имеют аналогичный цвет. Это требует знания вашей ситуации смежности на графике, который вы визуализируете, и может не всегда быть простым, и даже в этом случае это может быть не очень хорошей идеей, как указывает Дюкелинг в комментариях: для зрителей может быть непонятно, что используется один и тот же цвет дважды на графике для двух разных концепций.
Итак, наконец, в самой сложной ситуации ваш график достаточно сложен, чтобы у вас не было достаточно цветового пространства, чтобы гарантировать, что вы не получите в результате отдельные элементы с цветами, которые слишком похожи, используя вышеуказанную систему. В этом случае вам нужно построить граф смежности элементов вашего графа визуализации. Смежность здесь - нечеткое понятие - вы должны будете определить его правильно для вашей реальной ситуации. Например, во втором примере у данных от 12 июля есть дроссельная точка, где каждый цвет смежен с любым другим. Одним из подходов, который может помочь вам, если вы можете построить граф смежности, является проблема раскраски графов - есть библиотеки, которые могут вам помочь - например, boost :: graph в C ++ .