我正在尝试使用python创建热图。为此,我必须为可能值范围内的每个值分配一个RGB值。我想到将颜色从蓝色(最小值)改为绿色(红色)。
下面的图片示例说明了我如何看待颜色组成:我们的范围从1(纯蓝色)到3(纯红色),介于2和绿色之间。
我阅读了有关线性插值的内容,并编写了一个函数(或多或少)处理最小值和最大值之间范围内某个值的计算,并返回RGB元组。它使用if
和elif
条件(这并不能使我完全满意):
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