本文介绍了计算一系列值的RGB值以创建热图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to create a heat map with python. For this I have to assign an RGB value to every value in the range of possible values. I thought of changing the color from blue (minimal value) over green to red (maximal value).

下面的图片示例说明了我如何思考颜色组成:我们有一个范围从1(纯蓝色)到3(纯红色),2是在类似之间

The picture example below explains how I thought of the color composition: We have a range from 1 (pure blue) to 3 (pure red), 2 is in between resembled by green.

我读到关于线性插值,写了一个函数(或多或少)处理一个特定值在最小和最大值之间的计算并返回RGB元组。它使用 if elif 条件(这不让我完全满意):

I read about linear interpolation and wrote a function that (more or less) handles the calculation for a certain value in the range between a minimum and a maximum and returns an RGB tuple. It uses if and elif conditions (which does not make me completely happy):

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 条件,可以为每个颜色值写一个函数。有人有想法吗?非常感谢!

However I wonder if one could write a function for each color value without using if conditions. Does anybody have an idea? Thank you a lot!

推荐答案

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

这篇关于计算一系列值的RGB值以创建热图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 05:00
查看更多