Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有任何颜色生成算法吗?_Algorithm_Colors_Graph - Fatal编程技术网

Algorithm 有任何颜色生成算法吗?

Algorithm 有任何颜色生成算法吗?,algorithm,colors,graph,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",
);

有这样的功能吗?我已经看过了,但是我的google fu不够强大。

使用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颜色,以相当均匀的分布对全饱和颜色空间进行采样,尽可能长时间远离深色,并首先提供原色


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

我个人的观点是,一份颜色列表是最好的选择。这样,您就可以完全控制选择的颜色。如果你的颜色列表有,比如说,24个成员,那应该比你需要的多得多——一个依赖于25种颜色可微性的图形有严重的问题。