【问题标题】:Are there any color-generating algorithms?是否有任何颜色生成算法?
【发布时间】:2010-07-16 12:50:14
【问题描述】:

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

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

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

  • 首先包含经典颜色:当图表中的元素很少时,最好先出现红色、蓝色、深橙色、绿色、灰色,然后再出现不易辨别的颜色之后。

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

$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 不够强大。

【问题讨论】:

  • 我自己的观点是颜色列表是要走的路。这样您就可以完全控制选择哪些颜色。如果您的颜色列表有 24 个成员,那应该比您需要的要多得多 - 依赖于 25 种颜色可区分性的图形存在严重问题。

标签: algorithm colors graph


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2018-12-15
    相关资源
    最近更新 更多