我的应用程序包含一条折线图,可以同时显示20个或更多的数据集,但通常只会显示少于5个。我希望每个数据集都有一个独特的颜色。
目前我的做法是:
setHsl(i * 255.0 / session->getNumDataSets(), 255, 128);
它可以工作,但缺点是连续的两个数据集颜色非常相似。我希望每个生成的颜色都与前面所有生成的颜色形成最大对比度。
有没有更好的方法来生成颜色呢?
这是我的第二次尝试:
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();
我的想法是,第一种颜色在色轮上的位置为0。然后对于每个接下来的颜色,我围绕着色轮寻找颜色之间最大的间隙,并在该间隙中插入一个新颜色。这似乎效果更好,但仍然不完美,因为一旦间隙变小,连续的颜色又变得相似起来。