您可以编写自己的函数,将值转换为0…100→0…120度,然后将该值用作HSV(或HLS)色空间中颜色的H(或角度)。然后可以将其转换为RGB颜色以用于显示目的。在此颜色空间中计算线性解释的颜色时,它们通常看起来更好:这是HSV颜色空间的样子:
更新:
好消息,我惊讶地发现Python在其内置
colorsys模块中具有色彩空间转换例程(它们实际上表示“包括电池”)。这样做的好处是,它使创建一个实现我所描述的功能非常容易的函数,如下所示:
from colorsys import hsv_to_rgbdef pseudocolor(val, minval, maxval): """ Convert val in range minval..maxval to the range 0..120 degrees which correspond to the colors Red and Green in the HSV colorspace. """ h = (float(val-minval) / (maxval-minval)) * 120 # Convert hsv color (h,1,1) to its rgb equivalent. # Note: hsv_to_rgb() function expects h to be in the range 0..1 not 0..360 r, g, b = hsv_to_rgb(h/360, 1., 1.) return r, g, bif __name__ == '__main__': steps = 10 print('val R G B') for val in range(0, 100+steps, steps): print('{:3d} -> ({:.3f}, {:.3f}, {:.3f})'.format( val, *pseudocolor(val, 0, 100)))
输出:
val R G B 0 -> (1.000, 0.000, 0.000) 10 -> (1.000, 0.200, 0.000) 20 -> (1.000, 0.400, 0.000) 30 -> (1.000, 0.600, 0.000) 40 -> (1.000, 0.800, 0.000) 50 -> (1.000, 1.000, 0.000) 60 -> (0.800, 1.000, 0.000) 70 -> (0.600, 1.000, 0.000) 80 -> (0.400, 1.000, 0.000) 90 -> (0.200, 1.000, 0.000)100 -> (0.000, 1.000, 0.000)
这是显示其输出结果的示例:
我认为您可能会发现生成的颜色比我的其他答案更好。
概括:
可以将此功能修改为更通用一些,因为它可以使用除当前已硬编码到其中的红色和绿色以外的其他颜色。
这样做的方法如下:
def pseudocolor(val, minval, maxval, start_hue, stop_hue): """ Convert val in range minval..maxval to the range start_hue..stop_hue degrees in the HSV colorspace. """ h = (float(val-minval) / (maxval-minval)) * (stop_hue-start_hue) + start_hue # Convert hsv color (h,1,1) to its rgb equivalent. # Note: hsv_to_rgb() function expects h to be in the range 0..1 not 0..360 r, g, b = hsv_to_rgb(h/360, 1., 1.) return r, g, bif __name__ == '__main__': # angles of common colors in hsv colorspace RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA = range(0, 360, 60) steps = 10 print('val R G B') for val in range(0, 100+steps, steps): print('{:3d} -> ({:.3f}, {:.3f}, {:.3f})'.format( val, *pseudocolor(val, 0, 100, YELLOW, BLUE)))
结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)