指定颜色#

颜色格式#

Matplotlib 识别以下格式来指定颜色。

格式

示例

RGB 或 RGBA (红, 绿, 蓝, 透明度) 浮点值元组,取值范围为闭区间 [0, 1]。

  • (0.1, 0.2, 0.5)

  • (0.1, 0.2, 0.5, 0.3)

不区分大小写的十六进制 RGB 或 RGBA 字符串。

  • '#0f0f0f'

  • '#0f0f0f80'

不区分大小写的 RGB 或 RGBA 字符串等效的重复字符的十六进制简写。

  • '#abc' 作为 '#aabbcc'

  • '#fb1' 作为 '#ffbb11'

灰度值在闭区间 [0, 1] 内的浮点数值的字符串表示。

  • '0' 表示黑色

  • '1' 作为白色

  • '0.8' 作为浅灰色

一些基本颜色的单字符简写表示法。

备注

绿色、青色、品红色和黄色与X11/CSS4颜色不一致。它们特定的色调是为了在典型背景下更好地显示彩色线条而选择的。

  • 'b' 表示蓝色

  • 'g' 表示绿色

  • 'r' 作为红色

  • 'c' 表示青色

  • 'm' 表示洋红色

  • 'y' 表示黄色

  • 'k' 表示黑色

  • 'w' 作为白色

不区分大小写的 X11/CSS4 颜色名称,不含空格。

  • 'aquamarine'

  • 'mediumseagreen'

不区分大小写的颜色名称,来自 xkcd 颜色调查 ,带有 'xkcd:' 前缀。

  • 'xkcd:sky blue'

  • 'xkcd:eggshell'

不区分大小写的 Tableau 颜色,来自 'T10' 分类调色板。

备注

这是默认的颜色循环。

  • 'tab:blue'

  • 'tab:orange'

  • 'tab:green'

  • 'tab:red'

  • 'tab:purple'

  • 'tab:brown'

  • 'tab:pink'

  • 'tab:gray'

  • 'tab:olive'

  • 'tab:cyan'

“CN” 颜色规格,其中 'C' 前面是一个数字,作为默认属性循环的索引。

备注

Matplotlib 在绘制时索引颜色,如果循环中不包含颜色,则默认为黑色。

  • 'C0'

  • 'C1'

rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))

上述颜色格式之一和透明度浮点数的元组。

Added in version 3.8.

  • ('绿色', 0.3)

  • ('#f00', 0.9)

参见

以下链接提供了关于 Matplotlib 中颜色的更多信息。

"Red", "Green", 和 "Blue" 是这些颜色的强度。它们组合在一起,代表了颜色空间。

透明度#

颜色的 alpha 值指定其透明度,其中 0 是完全透明,1 是完全不透明。当颜色是半透明时,背景颜色将会透过来。

alpha 值通过根据公式将前景色与背景色混合来确定最终颜色

\[RGB_{result} = RGB_{background} * (1 - \alpha) + RGB_{foreground} * \alpha\]

以下图表展示了透明度的效果。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.patches import Rectangle

fig, ax = plt.subplots(figsize=(6.5, 1.65), layout='constrained')
ax.add_patch(Rectangle((-0.2, -0.35), 11.2, 0.7, color='C1', alpha=0.8))
for i, alpha in enumerate(np.linspace(0, 1, 11)):
    ax.add_patch(Rectangle((i, 0.05), 0.8, 0.6, alpha=alpha, zorder=0))
    ax.text(i+0.4, 0.85, f"{alpha:.1f}", ha='center')
    ax.add_patch(Rectangle((i, -0.05), 0.8, -0.6, alpha=alpha, zorder=2))
ax.set_xlim(-0.2, 13)
ax.set_ylim(-1, 1)
ax.set_title('alpha values')
ax.text(11.3, 0.6, 'zorder=1', va='center', color='C0')
ax.text(11.3, 0, 'zorder=2\nalpha=0.8', va='center', color='C1')
ax.text(11.3, -0.6, 'zorder=3', va='center', color='C0')
ax.axis('off')
alpha values

橙色矩形是半透明的,alpha = 0.8。蓝色方块的顶行绘制在橙色矩形下方,而蓝色方块的底行绘制在橙色矩形上方。

参见 Zorder 演示 以了解更多关于绘图顺序的内容。

“CN” 颜色选择#

Matplotlib 在绘制 Artists 时将 "CN" 颜色转换为 RGBA。使用 cycler 进行样式设置 部分包含有关控制颜色和样式属性的附加信息。

import matplotlib.pyplot as plt
import numpy as np

import matplotlib as mpl

th = np.linspace(0, 2*np.pi, 128)


def demo(sty):
    mpl.style.use(sty)
    fig, ax = plt.subplots(figsize=(3, 3))

    ax.set_title(f'style: {sty!r}', color='C0')

    ax.plot(th, np.cos(th), 'C1', label='C1')
    ax.plot(th, np.sin(th), 'C2', label='C2')
    ax.legend()


demo('default')
demo('seaborn-v0_8')
  • style: 'default'
  • style: 'seaborn-v0_8'

第一个颜色 'C0' 是标题。每个图表使用每个样式 rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) 的第二和第三种颜色。它们分别是 'C1''C2'

X11/CSS4 和 xkcd 颜色之间的比较#

xkcd 颜色来自 网络漫画 xkcd 进行的一项用户调查

在148个X11/CSS4颜色名称中,有95个也出现在xkcd颜色调查中。几乎所有这些颜色在X11/CSS4和xkcd调色板中都映射到不同的颜色值。只有'black'、'white'和'cyan'是相同的。

例如,'blue' 映射到 '#0000FF''xkcd:blue' 映射到 '#0343DF'。由于这些名称冲突,所有 xkcd 颜色都有 'xkcd:' 前缀。

下图展示了名称冲突。颜色名称中,颜色值一致的用粗体表示。

import matplotlib.colors as mcolors
import matplotlib.patches as mpatch

overlap = {name for name in mcolors.CSS4_COLORS
           if f'xkcd:{name}' in mcolors.XKCD_COLORS}

fig = plt.figure(figsize=[9, 5])
ax = fig.add_axes([0, 0, 1, 1])

n_groups = 3
n_rows = len(overlap) // n_groups + 1

for j, color_name in enumerate(sorted(overlap)):
    css4 = mcolors.CSS4_COLORS[color_name]
    xkcd = mcolors.XKCD_COLORS[f'xkcd:{color_name}'].upper()

    # Pick text colour based on perceived luminance.
    rgba = mcolors.to_rgba_array([css4, xkcd])
    luma = 0.299 * rgba[:, 0] + 0.587 * rgba[:, 1] + 0.114 * rgba[:, 2]
    css4_text_color = 'k' if luma[0] > 0.5 else 'w'
    xkcd_text_color = 'k' if luma[1] > 0.5 else 'w'

    col_shift = (j // n_rows) * 3
    y_pos = j % n_rows
    text_args = dict(fontsize=10, weight='bold' if css4 == xkcd else None)
    ax.add_patch(mpatch.Rectangle((0 + col_shift, y_pos), 1, 1, color=css4))
    ax.add_patch(mpatch.Rectangle((1 + col_shift, y_pos), 1, 1, color=xkcd))
    ax.text(0.5 + col_shift, y_pos + .7, css4,
            color=css4_text_color, ha='center', **text_args)
    ax.text(1.5 + col_shift, y_pos + .7, xkcd,
            color=xkcd_text_color, ha='center', **text_args)
    ax.text(2 + col_shift, y_pos + .7, f'  {color_name}', **text_args)

for g in range(n_groups):
    ax.hlines(range(n_rows), 3*g, 3*g + 2.8, color='0.7', linewidth=1)
    ax.text(0.5 + 3*g, -0.3, 'X11/CSS4', ha='center')
    ax.text(1.5 + 3*g, -0.3, 'xkcd', ha='center')

ax.set_xlim(0, 3 * n_groups)
ax.set_ylim(n_rows, -1)
ax.axis('off')

plt.show()
colors

由 Sphinx-Gallery 生成的图库