matplotlib色彩(colors)之colors模块探析(色彩转换的向下兼容API)

matplotlib色彩(colors)之色彩基础知识(色彩模型,matplotlib色彩格式,matplotlib默认色彩映射)简要说明了matplotlib色彩取值的要求。那么它的底层原理是什么呢?
matplotlib.colors模块是matplotlib色彩的基础模块,主要提供各类色彩参数的转换功能。模块提供了两种API:

  • 基于转换函数的兼容API:核心为一系列转换函数。从前面的文章可以看到matplotlib色彩定义格式的复杂性,在matplotlib未来的版本中可能会规范色彩定义格式。
  • 基于色彩映射的API:以colormapNormalize等类为基础构建色彩模型。

本文简单说明下兼容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)c1c2都转换为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()
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值