Eu recomendo usar os espaços de cores HSV ou HSL, não o espaço de cores RGB, porque o HSV e o HSL são melhor estruturados para gerar cores que parecem diferentes para os seres humanos. Você terá mais trabalho em RGB (embora existam conversões para frente e para trás, caso precise delas).
É assim que o HSV / HSL se parece:
Ao usar o espaço de cores HSV ou HSL, você pode assumir (mais ou menos) que a diferença entre os componentes H (matiz) de duas cores é uma boa aproximação da distância perceptiva entre as cores - ou seja, quanto maior a mudança de matiz, mais diferentes as cores vão olhar para os seres humanos. Você pode tentar tocar com S (saturação) e L / V (luminosidade / valor) e também obter mais algumas cores muito diferentes, mas elas não parecerão tão diferentes para a mesma alteração de valor quanto para variar a tonalidade.
Dependendo do número de cores distintas necessárias, é possível dividir o espaço da tonalidade nesse número de cores diferentes. Se, por exemplo, você tiver um intervalo de matiz de 256 valores e precisar de 16 cores distintas, sua primeira cor poderá ser (0, 128, 128), sua segunda (16, 128, 128) e assim por diante. De certa forma, escolhi arbitrariamente os valores S / L bem no meio aqui, pois geralmente serão leves e saturados o suficiente para ver claramente as diferenças de cores. Este sistema é simples e assume que você não precisa saber nada sobre adjacência de cores em seu gráfico / mapa.
Se você não conhece antecipadamente quantas cores distintas precisa, mas conhece o limite superior, e dividir o intervalo de matizes em cores com esse limite superior em mente, como acima, ainda fornece boas cores perceptivamente diferentes, então você pode usar o mesmo sistema com o limite superior.
Se você precisar de muitas cores distintas, ainda poderá usar cores muito semelhantes ou até as mesmas, desde que elas não apareçam perto dos outros elementos do gráfico que possuem a mesma cor. Isso exige que você conheça sua situação de adjacência no gráfico que você está processando e nem sempre seja direto, e mesmo assim pode não ser uma boa ideia, como Dukeling aponta nos comentários: pode ser confuso para os espectadores que a mesma cor seja usada duas vezes no gráfico para dois conceitos diferentes.
Portanto, finalmente, na situação mais complexa, seu gráfico é complexo o suficiente para que você não tenha espaço de cores suficiente para garantir que você não termine com elementos distintos com cores muito semelhantes no sistema acima. Nesse caso, você precisa criar um gráfico de adjacência de elementos do seu gráfico de visualização. A adjacência aqui é um conceito confuso - você terá que defini-lo corretamente para sua situação real. Por exemplo, no seu segundo exemplo, os dados de 12 de julho têm um ponto de estrangulamento em que todas as cores são adjacentes a todas as outras. Uma abordagem que pode ajudá-lo se você pode criar o gráfico de adjacência é o problema de coloração do gráfico - existem bibliotecas que podem ajudá-lo - por exemplo, boost :: graph em C ++ .