我试图用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条件语句。有人有想法吗?非常感谢!
halfmax
应计算为(minimum - maximum) / 2
,而value/halfmax
应为(value - minimum)/halfmax
,否则仅在minimum
为1且maximum
为3时才能正常工作。参见:http://codereview.stackexchange.com/a/64720/7641 - Guffa