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

本文深入解析matplotlib的颜色处理底层原理,介绍色彩模型、兼容API的转换函数与色彩映射API,包括BASE_COLORS等内置色彩映射,以及ColorConverter类的工作机制。

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()
<think> 我们在处理关于matplotlibcolors模块的查询。根据引用[1],我们知道colors模块matplotlib色彩处理的基础,提供色彩参数的转换功能,并有两种API:基于转换函数的兼容API和基于色彩映射的API(如colormap和Normalize类)。 引用[3]和[4]给出了使用颜色的示例,但没有深入colors模块的具体使用。因此,我们将重点参考引用[1]提供的信息,并补充一些常见的colors模块使用指南。 目标:介绍matplotlib.colors模块的使用方法和功能。 结构: 1. 模块概述 2. 主要功能:色彩转换色彩映射 3. 常用类和函数 4. 示例代码 注意:由于引用中提到了向下兼容API和新的基于色彩映射的API,我们将分别介绍。 根据要求,行内公式用$...$,独立公式用$$...$$,但我们这个主题可能涉及公式较少,主要涉及代码和描述。 另外,生成相关问题。 </think> ### Matplotlib库中`colors`模块详解 `matplotlib.colors`模块Matplotlib色彩系统的核心技术基础,主要用于色彩格式转换色彩映射和色彩规范管理。以下是核心功能和使用指南: #### 一、核心功能 1. **色彩格式转换** 提供向下兼容色彩格式转换API,支持多种输入格式(如RGB元组、十六进制字符串、HTML颜色名等)转换为标准化的RGBA格式。例如: ```python from matplotlib.colors import to_rgba print(to_rgba('red')) # (1.0, 0.0, 0.0, 1.0) print(to_rgba('#00FF00')) # (0.0, 1.0, 0.0, 1.0) ``` 2. **色彩映射系统** - **`Colormap`类**:定义连续色彩映射(如`viridis`, `jet`) - **`Normalize`类**:数据归一化(线性/对数缩放) ```python import matplotlib.cm as cm norm = plt.Normalize(vmin=0, vmax=100) # 数据归一化 cmap = cm.get_cmap('viridis') # 获取色彩映射 rgba = cmap(norm(50)) # 映射数值到颜色 ``` 3. **色彩规范构建** 支持创建自定义色彩映射和离散色阶: ```python from matplotlib.colors import LinearSegmentedColormap custom_cmap = LinearSegmentedColormap.from_list('my_cmap', ['blue', 'white', 'red']) ``` #### 二、典型应用场景 1. **绘图元素着色**(参考引用[4]): ```python ax.bar(categories, values, color=to_rgba('skyblue', alpha=0.7)) ``` 2. **饼图色彩定制**(参考引用[3]): ```python plt.pie(sizes, colors=['#FFD700', '#9ACD32', '#F08080', '#87CEFA']) ``` 3. **热力图色彩映射**: ```python plt.imshow(data, cmap='coolwarm', norm=LogNorm()) ``` #### 三、色彩模型基础 Matplotlib支持多种色彩模型: - **RGB/A**:$[0,1]$区间的浮点元组,如$(0.2, 0.4, 0.8, 1.0)$ - **HSL/HSV**:需通过`colorsys`模块转换 - **CIELAB**:通过`matplotlib.colors.Lab`类处理 > 色彩定义需满足:RGBA分量 ∈ $[0,1]$,十六进制长度必须为6(RGB)或8(RGBA)字符[^1]。 #### 四、API使用建议 1. **新代码优先使用面向对象API**: ```python from matplotlib.colors import Colormap, Normalize ``` 2. **兼容旧代码使用函数式API**: ```python from matplotlib.colors import rgb_to_hsv, hex2color ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值