有没有任何颜色生成算法?

时间:2010-07-16 12:50:14

标签: algorithm colors graph

是否有一个很好的算法来生成颜色,用于图表,如线/饼/条形图?实际上,所有图形都有一个内置的颜色列表,它们会自动分配给添加到其中的元素。但有时您需要自己手动分配颜色,在这种情况下,您需要避免自己手动插入颜色,这会耗费时间并且可能会产生不良结果,而算法可能会做得更好。

生成的颜色应具有以下属性:

  • 容易相互区分:随着越来越多的元素被添加,混淆和错失解释的概率上升。因此,重要的是颜色应尽可能容易地彼此辨别,尤其是颜色列表中彼此接近的颜色。冲突是可以接受的,但显然最好避免。

  • 首先包含经典颜色:当图表中存在少量元素时,红色,蓝色,深蓝色,绿色,灰色应该首先出现,而不太容易识别出来的颜色后。

目前我只是使用我在某个地方找到的颜色列表,如果我有比颜色列表更多的元素,则重复使用该列表,有时会导致颜色冲突。

$default_colors = array(
    "#4684ee", "#dc3912", "#ff9900", "#008000", "#666666",
    "#4942cc", "#cb4ac5", "#d6ae00", "#336699", "#dd4477",
    "#aaaa11", "#66aa00", "#888888", "#994499", "#dd5511",
    "#22aa99", "#999999", "#705770", "#109618", "#a32929",
);

那里有这样的功能吗?我看了,但我的谷歌不够强大。

1 个答案:

答案 0 :(得分:2)

使用HSV色彩空间可能就是这样。在我的脑海中,这是一个可以根据您的喜好修改的算法。

  • 让N为您需要的颜色数
  • let v = ceil(N / 6)是将要使用的不同值的数量
  • 设h = min(N,6)是将使用的不同色调的数量
  • 使用值
    1,1-1 / v,...,1 - (v-1)/ v
    每个都有色调
    0,1 / h,......,(h-1)/ h

这为您提供了h * v不同的颜色,采用相当均匀的分布对全饱和色彩空间进行采样,尽可能远离暗色,并首先提出原色。

如果您需要更多颜色,也可以加入饱和度。