Matplotlib支持使用各种颜色和颜色映射可视化信息。这些教程涵盖了这些颜色映射的基本内容,包括如何创建自己的颜色映射,以及如何为您的用例自定义颜色映射。
有关的更多信息,请参阅示例页面(examples page)。
颜色格式
Matplotlib可以识别以下格式来指定颜色。
格式描述 | 示例 |
数值是闭区间[0, 1]浮点数的RGB或RGBA(red,green,blue,alpha)的元组。 | · (0.1, 0.2, 0.5) · (0.1, 0.2, 0.5, 0.3) |
不区分大小写的十六进制RGB或RGBA字符串。 | · '#0f0f0f' · '#0f0f0f80' |
重复不区分大小写的十六进制RGB或RGBA字符串简写 | · '#abc' as '#aabbcc' · '#fb1' as '#ffbb11' |
闭合区间[0, 1]浮点数灰度值的字符串表示。 | · '0' as black · '1' as white · '0.8' as light gray |
一些基本颜色的单字符简写法。 注意: 绿色、青色、品红色和黄色与X11/CSS4颜色不一致。选择它们的特殊色调是为了在典型背景下更好地显示彩色线条。 | · 'b' as blue · 'g' as green · 'r' as red · 'c' as cyan · 'm' as magenta · 'y' as yellow · 'k' as black · 'w' as white |
不区分大小写的X11/CSS4颜色名称,不带空格。 | · 'aquamarine' (碧绿色) · 'mediumseagreen' (适中的海洋绿) |
前缀为“xkcd:”的xkcd颜色调查(xkcd color survey)中不区分大小写的颜色名称。 | · 'xkcd:sky blue' · 'xkcd:eggshell' |
“T10”分类调色板中不区分大小写的Tableau颜色。 备注: 这是默认的颜色循环(cycle)。 | · 'tab:blue' · 'tab:orange' · 'tab:green' · 'tab:red' · 'tab:purple' · 'tab:brown' · 'tab:pink' · 'tab:gray' · 'tab:olive' · 'tab:cyan' |
“CN”颜色规范,其中“C”位于作为默认属性循环(cycle)索引的数字之前。 备注: Matplotlib在绘制时对颜色进行索引,如果循环不包括颜色,则默认为黑色。 | · 'C0' · 'C1' ---------- rcParams["axes.prop_cycle"] (default: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])) |
参看:
以下链接提供了有关Matplotlib中颜色的详细信息。 · Color Demo Examplehttps://matplotlib.org/stable/gallery/color/color_demo.html · matplotlib.colors APIhttps://matplotlib.org/stable/api/colors_api.html#module-matplotlib.colors · List of named colors Examplehttps://matplotlib.org/stable/gallery/color/named_colors.html
“Red(红色)”、“Green(绿色)”和“Blue(蓝色)”是这些颜色的强度。组合在一起来表示色彩空间。
透明度(Transparency)
颜色的alpha值指定其透明度,其中0为完全透明,1为完全不透明。当一种颜色是半透明的时,背景颜色将显示出来。
通过下面公式,用alpha值将前景颜色与背景颜色混合来确定结果颜色:
RGB结果 = RGB背景 * (1 - α) + RGB前景 * α
下面绘图示例展示了透明度的效果。
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
import matplotlib.pyplot as pltfrom matplotlib.patches import Rectangleimport numpy as np
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')
fig.show()
橙色矩形是半透明的,alpha=0.8。上面一行蓝色正方形绘制在下面,下面一行蓝色方块绘制在橙色矩形的上面。 另请参见Zorder Demo以了解有关绘图顺序的更多信息。
“CN”颜色选择
Matplotlib绘制“艺术家(Artists)”时,会将“CN”颜色转换为RGBA。“循环器样式(Styling with cycler)”部分包含有关控制颜色和样式特性的其他信息。
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
import numpy as npimport matplotlib.pyplot as pltimport 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')plt.show()
标题用第一种颜色“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进行的一项用户调查(user survey conducted by the webcomic xkcd)。 148个X11/CSS4颜色名称中的95个也出现在xkcd颜色调查中。它们几乎都映射到X11/CSS4和xkcd调色板中的不同颜色值。只有“黑色(black)”、“白色(white)”和“青色(cyan)”是相同的。 例如,“blue”映射到“#0000FF”,而“xkcd:blue”则映射到“#0343DF”。由于这些名称冲突,所有xkcd颜色都有“xkcd:”前缀。 下面的可视化显示了名称冲突。颜色值一致的颜色名称以粗体显示。
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
import matplotlib.colors as mcolorsimport 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 = 3n_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()
examples page:
https://matplotlib.org/stable/gallery/color/index.html#color-examples
xkcd color survey:
https://xkcd.com/color/rgb/rcParams["axes.prop_cycle"]:https://matplotlib.org/stable/tutorials/introductory/customizing.html?highlight=axes.prop_cycle#matplotlibrc-sampleZorder Demo:https://matplotlib.org/stable/gallery/misc/zorder_demo.htmlStyling with cycler:https://matplotlib.org/stable/tutorials/intermediate/color_cycle.htmluser survey conducted by the webcomic xkcd:
https://blog.xkcd.com/2010/05/03/color-survey-results/