Mi aplicación contiene un gráfico de líneas que puede mostrar 20 o más conjuntos de datos a la vez, pero normalmente mostrará menos de 5. Me gustaría que cada conjunto de datos tenga un color único.¿Cómo puedo generar colores contrastantes?
Actualmente estoy haciendo esto:
setHsl(i * 255.0/session->getNumDataSets(), 255, 128);
Funciona, pero tiene la desventaja de que dos conjuntos de datos consecutivos tendrán colores muy similares. Me gustaría que cada color generado sea lo más contrastante posible contra todos los colores anteriores generados.
¿Cuál es una mejor manera de generar los colores?
Aquí es mi segundo intento:
double pos = 0;
if (wheel.size() == 0)
{
wheel.append(0.0);
wheel.append(1.0);
}
else
{
double gap = 0;
double hi = 0;
double lo = 0;
for (int i = 0; i < wheel.size() - 1; i++)
{
double g = wheel[i + 1] - wheel[i];
if (g > gap)
{
gap = g;
lo = wheel[i];
hi = wheel[i + 1];
}
}
pos = (hi - lo)/2.0 + lo;
wheel.append(pos);
qSort(wheel);
}
QColor c;
c.setHsl(pos * 255.0, 255, 128);
return c.toRgb();
Mi idea es que el primer color, es la posición 0 en el círculo cromático. Luego, para cada color siguiente, recorro la rueda de colores, buscando el espacio más grande entre los colores, y una vez que lo encuentro, inserto un nuevo color en ese espacio. Parece que funciona mejor, pero aún no es perfecto, ya que una vez que las brechas se vuelven pequeñas, los colores consecutivos vuelven a ser similares.
máximo del contrato se hace generalmente con los colores puros (Luminosidad = 120, Saturación = 240), y de hecho escoger la tonalidad como que ya lo hacen. – Wrikken
Ya no quiere elegir el tono porque los colores adyacentes son bastante similares. – Reinderien
Acabo de ver una publicación de blog en reddit o noticias de hackers que resuelve este problema muy bien, pero ahora no puedo encontrarlo. –