matplotlib色彩(colors)之色彩基础知识(色彩模型,matplotlib色彩格式,matplotlib默认色彩映射)简要说明了matplotlib
色彩取值的要求。那么它的底层原理是什么呢?
matplotlib.colors
模块是matplotlib
色彩的基础模块,主要提供各类色彩参数的转换功能。模块提供了两种API:
- 基于转换函数的兼容API:核心为一系列转换函数。从前面的文章可以看到
matplotlib
色彩定义格式的复杂性,在matplotlib
未来的版本中可能会规范色彩定义格式。 - 基于色彩映射的API:以
colormap
、Normalize
等类为基础构建色彩模型。
本文简单说明下兼容API。
重要变量
BASE_COLORS, TABLEAU_COLORS, CSS4_COLORS, XKCD_COLORS
:从_color_data
模块导入的内置色彩映射定义。_colors_full_map
:将默认的4个色彩映射整合为一个字典对象(未归一化)。
重要函数
get_named_colors_mapping()
:返回全局色彩映射,即_colors_full_map
变量。_is_nth_color(c)
:校验参数c
是否符合Cn
色彩格式,底层使用正则表达式\AC[0-9]+\Z
实现校验。is_color_like(c)
:校验参数c
是否是正常的色彩格式。函数首先校验c
是否符合Cn
色彩格式,然后通过to_rgba(c)
函数对c
进行转换,校验c
是否符合要求。to_rgba(c, alpha=None)
:将参数转换为rgba元组(r, g, b, a)
。函数首先使用_is_nth_color(c)
函数校验c
是否为Cn
色彩格式,如果是Cn
色彩格式,使用rcParams['axes.prop_cycle']
获取对应的16进制色彩字符串(注意,Cn
色彩格式的定义不在默认色彩映射中,而在rcParams['axes.prop_cycle']
中),然后到_colors_full_map
缓存中查找是否存在该色彩,如果没有,再使用_to_rgba_no_colorcycle(c, alpha)
函数进行转换。_to_rgba_no_colorcycle(c, alpha=None)
:将参数转换为rgba元组(r, g, b, a)
,但不再校验Cn
色彩格式,该函数是解析色彩的基础,分析色彩取值的各类模式统一转换为rgba元组(r, g, b, a)
。to_rgba_array(c, alpha=None)
:将参数转换为n行4列的numpy数组,如果参数不是numpy数组,将会通过to_rgba
函数转换后构建numpy数组。to_rgb(c)
:将参数转换为rgb元组(r,g,b)
,底层通过to_rgba(c)[:3]
进行转换。to_hex(c, keep_alpha=False)
:将参数转换为16进制色彩字符串,函数首先通过to_rgba()
函数将参数转换为rgba元组或rgb元组,然后再转换为16进制字符串。same_color(c1, c2)
:函数通过to_rgba_array(c, alpha=None)
将c1
、c2
都转换为numpy数组再进行比较。
ColorConverter
类
通过ColorConverter
类对外提供API。
class ColorConverter:
"""
A class only kept for backwards compatibility.
Its functionality is entirely provided by module-level functions.
"""
colors = _colors_full_map
cache = _colors_full_map.cache
to_rgb = staticmethod(to_rgb)
to_rgba = staticmethod(to_rgba)
to_rgba_array = staticmethod(to_rgba_array)
colorConverter = ColorConverter()