有没有任何产生颜色的算法?

3
有没有一种好的算法可以生成用于线性/饼图/条形图等图表的颜色?几乎所有的图表都有一个内置的颜色列表,它们会自动分配给添加到其中的元素。但有时您需要手动分配颜色,这时您需要避免手动插入颜色,因为这很耗时,而且结果可能不好,而算法可能做得更好。
生成的颜色应具有以下特性:
- 容易区分:随着越来越多的元素被添加,混淆和误解的可能性增加。因此,重要的是颜色尽可能容易区分,特别是在颜色列表中相近的颜色。冲突是可以接受的,但最好避免。 - 包含经典颜色:当图表中只有少量元素时,最好首先出现红色、蓝色、深橙色、绿色、灰色等经典颜色,然后再出现较难区分的颜色。
目前,我只是使用了一个我在某个地方找到的颜色列表,如果元素比颜色列表多,就会重复使用列表,导致有时会发生颜色冲突。
$default_colors = array(
    "#4684ee", "#dc3912", "#ff9900", "#008000", "#666666",
    "#4942cc", "#cb4ac5", "#d6ae00", "#336699", "#dd4477",
    "#aaaa11", "#66aa00", "#888888", "#994499", "#dd5511",
    "#22aa99", "#999999", "#705770", "#109618", "#a32929",
);

是否有这样的功能?我已经搜索过了,但我的谷歌技巧不够强。


1
我个人的看法是使用颜色列表。这样你就可以完全控制所选择的颜色。如果你的颜色列表有24个成员,那应该足够满足你的需求--一个依赖于25种不同颜色可区分性的图形存在严重问题。 - High Performance Mark
1个回答

2
使用HSV颜色空间可能是最好的选择。下面是一个可能适合您口味的算法,供您修改。
  • 让N为所需颜色的数量
  • 让v = ceil(N / 6)为将使用的不同值的数量
  • 让h = min(N, 6)为将使用的不同色调的数量
  • 使用以下值
    1、1-1/v、...、1-(v-1)/v
    每个值配以以下色调
    0、1/h、...、(h-1)/h
这为您提供了h*v种不同的颜色,用相当均匀的分布对全饱和度的颜色空间进行采样,尽可能避免使用暗色,并首先出现主要颜色。
如果您需要更多颜色,还可以加入饱和度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接