为一系列数字着色

问题描述

我要实现的是在定义的RGB范围内为一系列数字着色。是否有一些算法可以完成这样的任务?关于着色图顶点(NP问题)的文章很多,但我的目标是为一系列较小值(

例如,要在最小的 RED (255,0,0)到最大的 GREEN (0,128,0)的范围内为此类序列着色,假设函数 generate_colors 可以完成任务(RGB值就是一个例子,我从调色板中获取它们只是为了展示我想要实现的目标):

    >>> numbers = [1,107,200,450.3,500]
    >>> generate_colors(numbers)
    [(255,0),(255,153,51),255,(102,204,(0,128,0)]

就目前而言,我仅看到一种在 min max 值之间定义增量的方法,并实现了具有Delta大小步长的梯度下降之类的方法。但是,如果数据如此不平衡,几乎所有值都将比中位数大得多?例如,在 1-30 范围内的10个值和在 30000-50 000 范围内的200个值。我认为,在这种情况下,应该有一种为这些值创建加权规则的方法,这样,来自中值的上半部分(来自示例)的颜色将收到比下半部分更多的分布式颜色。因此,我决定检查是否有针对此任务的已开发算法,以免自己重新发明它。

解决方法

对数字进行排序。通过二进制搜索分配颜色。

即,获取您的数字列表。将它们分开在中间。高于中位数的那些获得一种颜色范围,低于中位数的那些获得另一种颜色范围。如果存在中间值元素,它将获得中间值颜色。

每侧重复一次。

两个旁注。首先是红色到绿色是不佳的选择。约5%的人患有红绿色色盲。第二个是,如果您通过色轮跟踪3D路径,则将获得更广泛的颜色范围。 (您需要尝试使用它才能看到适合自己的方法。)