使用R语言或者python时,经常需要设置颜色,一般常用的颜色表示方法是RGB或者16进制的表示方法,本篇文章着重对RGB和16进制的表示方法进行详细介绍:
首先RGB值:
RGB 值指的是红色 (R)、绿色 (G) 和蓝色 (B) 三种颜色在某种颜色下的数值表示。在RGB模型中,每种颜色的值通常用一个 0~255 范围内的整数来表示。混合这三种颜色不同比例的RGB值可以得到任何一种颜色。
较高的RGB值表示更强的颜色通道强度,因此颜色更鲜艳、更亮。例如,RGB值为(255,0,0)表示最高强度的红色,而(0,255,0)表示最高强度的绿色,(0,0,255)表示最高强度的蓝色。如果三个通道的值都很高,那么这个颜色就非常明亮鲜艳,比如(255,255,255)表示最高强度的白色。
相反地,较低的RGB值表示较弱的颜色通道强度,颜色更暗淡。例如,RGB值为(128,0,0)表示相对较弱的红色,而(0,128,0)表示相对较弱的绿色,(0,0,128)表示相对较弱的蓝色。如果三个通道的值都很低,那么这个颜色就非常暗淡,比如(0,0,0)表示最低强度的黑色。
特殊的,当R=G=B值代表灰色,比如(128,128,128)代表50%的灰色,值越大则更亮的灰色。
下面用python代码直观的展示一下不同强度的红色:
import matplotlib.pyplot as plt
import numpy as np
Reds = np.zeros((10,3), dtype= np.uint8)
Reds[:,0] = np.linspace(0,255,10)
print(Reds)
输出为:
array([[ 0, 0, 0],
[ 28, 0, 0],
[ 56, 0, 0],
[ 85, 0, 0],
[113, 0, 0],
[141, 0, 0],
[170, 0, 0],
[198, 0, 0],
[226, 0, 0],
[255, 0, 0]], dtype=uint8)
一共10个颜色,只改变了RGB三个值中的R值(由0-255,分为了10个梯度),接着使用imshow函数进行展示:
#使用np.newaxis将原数组转为三维数组
plt.imshow(Reds[np.newaxis,:,:])
plt.axis('off')
plt.show()
运行结果如下:
不同强度的灰色示例代码如下:
Greys = np.zeros((10,3), dtype= np.uint8)
Greys[:,0] = np.linspace(0,255,10)
Greys[:,1] = np.linspace(0,255,10)
Greys[:,2] = np.linspace(0,255,10)
plt.imshow(Greys[np.newaxis,:,:])
plt.axis('off')
plt.show()
运行结果如下:
接着介绍一下16进制的颜色表示规则,以及两者之间如何进行转换:
16进制颜色表示法则是用一个6位的16进制数来表示颜色。其中前两位表示红色的亮度,中间两位表示绿色的亮度,后两位表示蓝色的亮度。每一位的取值范围是0到F(十六进制的F对应十进制的15)。例如,红色可以表示为#FF0000,其中前两位为FF代表RGB中的R值为255(15*16+15)。
附一个两者之间相互的转换的python函数:
1. 将RGB值转换为16进制函数(使用python内置的hex函数):
def RGB_to_Hex(inrgb):
rval = hex(inrgb[0])[-2:].replace("x", "0")
gval = hex(inrgb[1])[-2:].replace("x", "0")
bval = hex(inrgb[2])[-2:].replace("x", "0")
hexval = "#" + rval.upper() + gval.upper() + bval.upper()
return hexval
RGB_to_Hex((255,128,0))
运行结果如下:
'#FF8000'
2. 将16进制值转换为RGB值(使用python内置的int函数):
def Hex_to_RGB(inhex):
rval = inhex[1:3]
gval = inhex[3:5]
bval = inhex[5:]
rgbval = (int(rval, 16), int(gval, 16), int(bval, 16))
return rgbval
Hex_to_RGB(#FF8000')
运行结果如下:
(255, 128, 0)
除了上述所列的颜色,下面是其它一些常用颜色的RGB及16进制的表示值:
青色:(0, 255, 255) / #00FFFF
黄色:(255, 255, 0) / #FFFF00
橙色:(255, 165, 0) / #FFA500
紫色:(128, 0, 128) / #800080
粉色:(255, 192, 203) / #FFC0CB
棕色:(165, 42, 42) / #A52A2A
CommonColors = np.array([(0,255,255), (255,255,0), (255,165,0), (128,0,128), (255,192,203), (165, 42, 42)])
plt.imshow(CommonColors[np.newaxis,:,:])
plt.xticks(ticks=range(6),labels=["cyan", "yellow", "orange", "purple", "pink", "brown"],fontsize = 15)
plt.yticks([])
plt.show()
运行结果如下:
现在应该对常用的这两种颜色表示方法都理解了吧!!