色彩模型(RGB,RGBA,CMYK灰度)
matplotlib
中的色彩定义主要用到了RGB
、RGBA
、CMYK
、灰色
四种模型。
RGB模型
RGB是最常见的一种色彩模型,它使用红、绿、蓝三原色的亮度来定量表示颜色,这种模型也称为加色混色模型,是以RGB三色光互相叠加来实现混色的方法,因而适合于显示器等发光体的显示。
如果是三原色光中的两种色光进行等比例混合的话,那么,得到的结果是黄、青、紫三色光。
常见的案例如:
红+绿=黄
红+蓝=紫(亮紫)
绿+蓝=青
红+绿+蓝=白
三种基色光全无=黑
这是色光混合,称为加色混合法。
因此RGB模型的颜色可以用R、G、B三个分量来表示。
F(物体颜色)=R(红色的百分比)+G(绿色的百分比)+B(蓝色的百分比)
RGBA模型
RGBA模型是在RGB模型的基础上加上了Alpha通道,Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染和alpha合成变得可能。提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。
alpha通道一般用作不透明度参数。如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。在0%和100%之间的值则使得像素可以透过背景显示出来,就像透过玻璃(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的。它使数码合成变得容易。
CMYK模型
CMYK模型,也被称为印刷四色模型,它彩色印刷时采用的一种套色模型,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:C:Cyan = 青色,又称为天蓝色或是湛蓝,M:Magenta = 品红色,又称为洋红色;Y:Yellow = 黄色;K:blacK=黑色,此处缩写使用最后一个字母K而非开头的B,是为了避免与Blue混淆。
CMYK模式是减色模式,相对应的RGB模式是加色模式。CMYK模式是一种用于印刷品依靠反光的色彩模模型,RGB模式是一种屏幕显示发光的色彩模型。
灰色模型
灰度模型使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。 每个灰度对象都具有从 0%(白色)到100%(黑色)的亮度值。 使用黑白或灰度扫描仪生成的图像通常以灰度显示。
matplotlib
色彩格式
-
RGB小数模式
:3元组(r, g, b)
,对应R、G、B,每个元素取值要求为0
到1
之间的小数,例如(0.1, 0.2 ,0.5)
。 -
RGBA小数模式
:4元组(r, g, b, a)
,对应R、G、B、A,每个元素取值要求为0
到1
之间的小数,例如(0.1, 0.2 ,0.5 ,0.3)
。 -
RGB16进制字符串模式
:长度为7的字符串#rrggbb
,以#
开头后面6位16进数字,每2位一组,对应R、G、B,例如#FFFFFF
。 -
RGBA16进制字符串模式
:长度为9的字符串#rrggbbaa
,以#
开头后面8位16进数字,每2位一组,对应R、G、B、A,例如#FFFFFFFF
。 -
16进制字符串简写模式
:RGB16进制字符串模式
或RGBA16进制字符串模式
的简写模式,每组数字如果2个数字相同可简写为1个,例如#FFFFFF
可简写为#FFF
。 -
灰度小数字符串模式
:小数字符串
,表示灰度,小数取值范围为0
到1
,例如'0.5'
。 -
基础颜色字符
:长度为1的字符串
,取值范围为{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}
对应RGB模型、CMYK模型的基础色和白色。 -
X11/CSS4 ("html")模式的色彩名称
:字符串
,比如"blue"
。 -
xkcd色彩名称
:以xkcd:开头的字符串
,对应xkcd社区定义的色彩映射
,例如'xkcd:sky blue'
。 -
默认色彩循环,Cn彩色定义
:由字符串C和1个非负整数构成
,数字为默认色彩循环rcParams["axes.prop_cycle"]
的索引,rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))
,数字超过9,对应的颜色索引为数字个位数索引,例如C101
和C1
的取值相同。注意C
必须为大写。matplotlib
大部分绘图函数、方法的颜色属性指向默认色彩循环,这也是为什么默认图表的颜色经常为蓝色的原因。 -
Tableau色彩定义
:以tab:开头的字符串
,取值范围为:{'tab:blue', 'tab:orange', 'tab:green', 'tab:red', 'tab:purple', 'tab:brown', 'tab:pink', 'tab:gray', 'tab:olive', 'tab:cyan'}
,对应默认的色彩循环,例如'tab:blue'
等于C0
。色彩取自Tableau
的tab10
调色盘。
案例:演示11种色彩格式
import matplotlib.pyplot as plt
color_list = [(0.1, 0.1, 0.1), (0.1, 0.1, 0.1, 0.5), '#FFFF00',
'#FFFF00FF', '#F0F', '0.5', 'r', 'blue', 'C0', 'xkcd:blue', 'tab:blue']
for i, j in enumerate(color_list):
plt.plot([i, i], c=j)
plt.annotate(repr(j), (0, i+0.1))
plt.show()
matplotlib
默认色彩映射(colormap)
从上面的色彩格式可知,色彩的表现形式主要有两种:
- 数字(包括小数和数字字符串):16进制字符串模式可以快捷的转换为小数元组。
- 色彩名称字符串:色彩名称和色彩数字之间存在映射关系,我们称之为
色彩映射(colormap)
。
matplotlib._color_data
模块定义了4种色彩映射,根据颜色映射可知,最终各种色彩名称字符串都会统一转换为数字表示,因此各种不同色彩取值才可能统一。
官方案例https://matplotlib.org/gallery/color/named_colors.html
演示了4中默认色彩映射对应的颜色。
默认的4种色彩映射如下:
- 基本色彩:
BASE_COLORS = {
'b': (0, 0, 1), # blue
'g': (0, 0.5, 0), # green
'r': (1, 0, 0), # red
'c': (0, 0.75, 0.75), # cyan
'm': (0.75, 0, 0.75), # magenta
'y': (0.75, 0.75, 0), # yellow
'k': (0, 0, 0), # black
'w': (1, 1, 1), # white
}
- Tableau色彩:
TABLEAU_COLORS = (
('blue', '#1f77b4'),
('orange', '#ff7f0e'),
('green', '#2ca02c'),
('red', '#d62728'),
('purple', '#9467bd'),
('brown', '#8c564b'),
('pink', '#e377c2'),
('gray', '#7f7f7f'),
('olive', '#bcbd22'),
('cyan', '#17becf'),
)
# Normalize name to "tab:<name>" to avoid name collisions.
TABLEAU_COLORS = OrderedDict(
('tab:' + name, value) for name, value in TABLEAU_COLORS)
- XKCD色彩:
XKCD_COLORS = {
'cloudy blue': '#acc2d9',
'dark pastel green': '#56ae57',
'dust': '#b2996e',
'electric lime': '#a8ff04',
'fresh green': '#69d84f',
'light eggplant': '#894585',
......
}
# Normalize name to "xkcd:<name>" to avoid name collisions.
XKCD_COLORS = {'xkcd:' + name: value for name, value in XKCD_COLORS.items()}
- CSS色彩:
CSS4_COLORS = {
'aliceblue': '#F0F8FF',
'antiquewhite': '#FAEBD7',
'aqua': '#00FFFF',
'aquamarine': '#7FFFD4',
'azure': '#F0FFFF',
......
}