笔记
单击此处 下载完整的示例代码
指定颜色#
Matplotlib 识别以下格式来指定颜色。
格式 |
例子 |
---|---|
闭区间 [0, 1] 中浮点值的 RGB 或 RGBA(红、绿、蓝、alpha)元组。 |
|
不区分大小写的十六进制 RGB 或 RGBA 字符串。 |
|
重复字符的不区分大小写的 RGB 或 RGBA 字符串等效十六进制简写。 |
|
灰度值的闭区间中浮点值的字符串表示形式。 |
|
一些基本颜色的单字符速记符号。 笔记 绿色、青色、洋红色和黄色与 X11/CSS4 颜色不一致。选择它们的特殊色调是为了在典型背景下更好地看到彩色线条。 |
|
不区分大小写的 X11/CSS4 颜色名称,没有空格。 |
|
来自xkcd 颜色调查的不区分大小写的颜色名称,
带有 |
|
来自“T10”分类调色板的不区分大小写的 Tableau 颜色。 笔记 这是默认的颜色循环。 |
|
“CN”颜色规范, 笔记 Matplotlib 在绘制时索引颜色,如果循环不包含颜色,则默认为黑色。 |
|
|
“红色”、“绿色”和“蓝色”是这些颜色的强度。结合起来,它们代表色彩空间。
Matplotlib 根据zorder
参数绘制 Artists。如果没有指定值,Matplotlib 默认按照 Artists 添加到 Axes 的顺序。
艺术家的 alpha 控制不透明度。它指示新艺术家的 RGB 颜色如何与轴上已有的 RGB 颜色相结合。
两位艺术家结合了 alpha 合成。Matplotlib 使用下面的公式来计算混合新艺术家的结果。
RGB_{new} = RGB_{below} * (1 - \alpha) + RGB_{artist} * \alpha
Alpha 为 1 表示新艺术家完全覆盖了以前的颜色。顶部颜色的 Alpha 为 0 不可见;但是,它有助于将中间值混合为所有先前艺术家的累积结果。下表包含示例。
阿尔法值 |
视觉的 |
---|---|
|
|
|
笔记
在 Matplotlib 中重新排序艺术家不是可交换的。
“CN”颜色选择#
Matplotlib 在绘制 Artists 时将“CN”颜色转换为 RGBA。使用 循环仪设置样式部分包含有关控制颜色和样式属性的其他信息。
import numpy as np
import matplotlib.pyplot as plt
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('style: {!r}'.format(sty), 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 调色板中的不同颜色值。只有“黑色”、“白色”和“青色”是相同的。
例如,'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.413秒)