指定顏色#

顏色格式#

Matplotlib 識別以下格式來指定顏色。

格式

範例

RGB 或 RGBA(紅、綠、藍、Alpha)浮點數元組,值在閉區間 [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"] (預設值:cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']))

上述顏色格式之一和 alpha 浮點數的元組。

在版本 3.8 中新增。

  • ('green', 0.3)

  • ('#f00', 0.9)

特殊值 "none" 是完全透明的,即等同於 RGBA 值 (0.0, 0.0, 0.0, 0.0)

  • 'none'

另請參閱

以下連結提供有關 Matplotlib 中顏色的更多資訊。

「紅」、「綠」和「藍」是這些顏色的強度。它們組合起來表示色彩空間。

透明度#

顏色的 *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 在繪製藝術家時將 "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"] 的第二個和第三個顏色 (預設值: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

腳本的總執行時間: (0 分鐘 1.865 秒)

由 Sphinx-Gallery 產生的圖庫