注意
前往末尾 下载完整示例代码。
指定颜色#
颜色格式#
Matplotlib 识别以下颜色指定格式。
格式 |
示例 |
---|---|
RGB 或 RGBA(红、绿、蓝、Alpha)浮点值元组,位于闭区间 [0, 1] 内。 |
|
不区分大小写的十六进制 RGB 或 RGBA 字符串。 |
|
不区分大小写的 RGB 或 RGBA 字符串等效十六进制缩写(重复字符)。 |
|
灰度值浮点数(位于闭区间 |
|
某些基本颜色的单字符简写。 注意 绿色、青色、洋红色和黄色不与 X11/CSS4 颜色重合。选择它们的特定色调是为了在典型背景下更好地显示彩色线条。 |
|
不区分大小写、不含空格的 X11/CSS4 颜色名称。 |
|
不区分大小写,来自 xkcd 颜色调查 的颜色名称,带有 |
|
不区分大小写,来自 'T10' 分类调色板的 Tableau 颜色。 注意 这是默认颜色循环。 |
|
"CN" 颜色规范,其中 注意 Matplotlib 在绘图时对颜色进行索引,如果循环中不包含该颜色,则默认为黑色。 |
|
|
|
以上颜色格式之一和 Alpha 浮点值的元组。 在版本 3.8 中添加。 |
|
特殊值 “none” 表示完全透明,即等同于 RGBA 值 |
|
“红”、“绿”和“蓝”是这些颜色的强度。它们组合起来代表了色彩空间。
透明度#
颜色的 alpha 值指定了其透明度,其中 0 表示完全透明,1 表示完全不透明。当颜色为半透明时,背景颜色将透过显示。
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 = 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')
第一个颜色 '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()

脚本总运行时间: (0 分 1.723 秒)