Je recommande d'utiliser les espaces colorimétriques HSV ou HSL, pas l'espace colorimétrique RVB, car HSV et HSL sont mieux structurés pour générer des couleurs qui semblent différentes de celles des humains. Vous aurez plus de travail en RVB (même si des conversions d'avant en arrière existent, si vous en avez besoin).
Voici à quoi ressemble HSV / HSL:
Lorsque vous utilisez l'espace colorimétrique HSV ou HSL, vous pouvez supposer (très grossièrement) que la différence entre les composantes H (teinte) de deux couleurs est une bonne approximation de la distance de perception entre les couleurs - c'est-à-dire que plus le changement de teinte est important, plus différentes couleurs ressembleront aux humains. Vous pouvez essayer de jouer avec S (saturation) et L / V (luminosité / valeur) ainsi que quelques couleurs très différentes, mais elles ne seront pas aussi différentes pour le même changement de valeur que la variation de la teinte.
Selon le nombre de couleurs distinctes dont vous avez besoin, vous pouvez diviser l'espace de teinte en ce nombre de couleurs différentes. Si, par exemple, vous avez une plage de teintes de 256 valeurs et que vous avez besoin de 16 couleurs distinctes, votre première couleur peut être (0, 128, 128), votre seconde (16, 128, 128) et ainsi de suite. J'ai choisi un peu arbitrairement des valeurs S / L au milieu ici car cela sera généralement assez léger et saturé pour voir clairement les différences de couleur. Ce système est simple et suppose que vous ne devez rien savoir sur la contiguïté des couleurs dans votre graphique / carte.
Si vous ne savez pas à l'avance combien de couleurs distinctes vous avez besoin mais que vous connaissez la limite supérieure, et que la division de la gamme de teintes en couleurs avec cette limite supérieure à l'esprit comme ci-dessus vous donne toujours de bonnes couleurs perceptuellement différentes, vous pouvez utiliser le même système avec la limite supérieure.
Si vous (pourriez) avoir besoin de très nombreuses couleurs distinctes, vous pouvez toujours vous en sortir en utilisant des couleurs très similaires ou même identiques, tant qu'elles n'apparaissent pas à proximité des autres éléments du graphique qui ont la couleur similaire. Cela nécessite de connaître votre situation d'adjacence dans le graphique que vous restituez et peut ne pas toujours être simple, et même alors, ce n'est peut-être pas une bonne idée, comme le souligne Dukeling dans les commentaires: il peut être déroutant pour les téléspectateurs que la même couleur soit utilisée. deux fois dans le graphique pour deux concepts différents.
Donc, finalement, dans la situation la plus complexe, votre graphique est suffisamment complexe pour que vous n'ayez pas assez d'espace colorimétrique pour vous assurer de ne pas vous retrouver avec des éléments distincts avec des couleurs trop similaires en utilisant le système ci-dessus. Dans ce cas, vous devez créer un graphe d'adjacence des éléments de votre graphe de visualisation. L'adjacence est ici un concept flou - vous devrez le définir correctement pour votre situation réelle. Par exemple, dans votre deuxième exemple, les données du 12 juillet ont un point d'étranglement où chaque couleur est adjacente à toutes les autres. Une approche qui peut vous aider si vous pouvez créer le graphe d'adjacence est le problème de coloration du graphe - il existe des bibliothèques qui peuvent vous aider - par exemple boost :: graph en C ++ .