我正在尝试使用python创建热图。为此,我必须为可能值范围内的每个值分配一个RGB值。我想到将颜色从蓝色(最小值)改为绿色(红色)。

下面的图片示例说明了我如何看待颜色组成:我们的范围从1(纯蓝色)到3(纯红色),介于2和绿色之间。

我阅读了有关线性插值的内容,并编写了一个函数(或多或少)处理最小值和最大值之间范围内某个值的计算,并返回RGB元组。它使用ifelif条件(这并不能使我完全满意):

def convert_to_rgb(minimum, maximum, value):
    minimum, maximum = float(minimum), float(maximum)
    halfmax = (minimum + maximum) / 2
    if minimum <= value <= halfmax:
        r = 0
        g = int( 255./(halfmax - minimum) * (value - minimum))
        b = int( 255. + -255./(halfmax - minimum)  * (value - minimum))
        return (r,g,b)
    elif halfmax < value <= maximum:
        r = int( 255./(maximum - halfmax) * (value - halfmax))
        g = int( 255. + -255./(maximum - halfmax)  * (value - halfmax))
        b = 0
        return (r,g,b)

但是我不知道是否可以使用if条件为每个颜色值编写一个函数而无需。有人有主意吗?非常感谢!

最佳答案

def rgb(minimum, maximum, value):
    minimum, maximum = float(minimum), float(maximum)
    ratio = 2 * (value-minimum) / (maximum - minimum)
    b = int(max(0, 255*(1 - ratio)))
    r = int(max(0, 255*(ratio - 1)))
    g = 255 - b - r
    return r, g, b

10-06 09:03