Matplotlib Cheatsheets色彩系统详解:从基础到高级配色方案
你是否还在为数据可视化中的色彩搭配而烦恼?是否想让图表既专业又具有视觉冲击力?本文将通过Matplotlib Cheatsheets项目的实战案例,从基础色彩表示到高级配色方案,帮助你全面掌握数据可视化的色彩运用技巧。读完本文,你将能够:掌握5种色彩定义方法、学会选择适合场景的配色方案、解决色彩对比度和可读性问题、制作专业的渐变色图表。
色彩基础表示方法
Matplotlib支持多种色彩表示方式,满足不同场景的需求。在scripts/colors.py中展示了最常用的几种表示方法:
- 原始颜色字符:如'b'(蓝色)、'g'(绿色)、'r'(红色)等,共8种基础颜色
- RGBA元组:通过红、绿、蓝、透明度四个0-1之间的数值定义颜色,如(1, 0, 0, 0.5)表示半透明红色
- 十六进制字符串:以#开头的6位或8位字符串,如"#FF0000BB"表示带透明度的红色
- 颜色周期:使用"C0"到"C9"表示10种预定义的循环颜色
- 灰度值:0到1之间的字符串,如"0.5"表示中灰色
- 颜色名称:如"DarkRed"、"Firebrick"等CSS颜色名称
以下是一个综合示例,展示不同表示方法的应用:
# 多种色彩表示方法示例(源自colors.py)
palettes = {
'raw': ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'],
'rgba': [(1, 0, 0), (1, 0, 0, 0.75), (1, 0, 0, 0.50), (1, 0, 0, 0.25)],
'HexRGBA': ["#FF0000", "#FF0000BB", "#FF000088", "#FF000044"],
'cycle': ["C%d" % i for i in range(10)],
'grey': ["%1.1f" % (i/10) for i in range(11)],
'name': ["DarkRed", "Firebrick", "Crimson", "IndianRed", "Salmon"]
}
预定义颜色名称与选择
Matplotlib提供了丰富的预定义颜色名称,包括CSS4颜色和X11颜色。在scripts/colornames.py中,展示了如何获取并可视化所有可用的颜色名称。通过将颜色按色相、饱和度和明度排序,可以更系统地选择颜色。
# 颜色名称排序与可视化(源自colornames.py)
colors = dict(mpl.colors.BASE_COLORS, **mpl.colors.CSS4_COLORS)
by_hsv = sorted((tuple(mpl.colors.rgb_to_hsv(mpl.colors.to_rgba(color)[:3])), name)
for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]
常用的颜色名称分类包括:
- 红色系:DarkRed, Firebrick, Crimson, IndianRed, Salmon
- 蓝色系:Navy, DarkBlue, MediumBlue, RoyalBlue, SteelBlue
- 绿色系:DarkGreen, ForestGreen, SeaGreen, MediumSeaGreen, LimeGreen
色彩映射表(Colormaps)详解
色彩映射表(Colormap)是一系列渐变色的集合,用于表示数据的连续变化。scripts/colormaps.py中定义了Matplotlib支持的所有内置色彩映射表,主要分为以下几类:
顺序型色彩映射表
从低到高使用单一色调的渐变,适合表示有顺序的数据。如:
- viridis:从蓝到黄的渐变,是Matplotlib的默认色彩映射表
- plasma:从紫到黄的渐变
- inferno:从黑到黄的渐变
- magma:从黑到红的渐变
- cividis:为色盲友好设计的蓝到黄渐变
发散型色彩映射表
从中间值向两端发散为不同色调,适合表示有中心参考值的数据。如:
- PRGn:从粉到绿的渐变
- PiYG:从粉到黄到绿的渐变
- RdYlGn:从红到黄到绿的渐变
- coolwarm:从蓝到红的渐变
定性型色彩映射表
使用多种不同的色调,没有内在顺序,适合表示分类数据。如:
- tab10:10种不同颜色的分类色彩映射表
- tab20:20种不同颜色的分类色彩映射表
- Pastel1/2:柔和的分类色彩映射表
- Set1/2/3:对比度较高的分类色彩映射表
特殊用途色彩映射表
针对特定场景设计的色彩映射表。如:
- Greys:灰度渐变
- hot:热图色彩映射表
- bone:X光图像风格的色彩映射表
- terrain:地形高度图色彩映射表
以下是色彩映射表的使用示例:
# 色彩映射表使用示例(源自colormaps.py)
cmaps = ('viridis', 'plasma', 'inferno', 'magma', 'cividis',
'PRGn', 'PiYG', 'RdYlGn', 'coolwarm',
'tab10', 'tab20', 'Pastel1', 'Set1',
'Greys', 'Reds', 'Oranges', 'Blues', 'Greens')
for name in cmaps:
Z = np.linspace(0, 1, 256).reshape(1, 256)
ax.imshow(Z, extent=[xmin, xmax, ymin, ymax], cmap=name)
色彩应用实战技巧
色彩范围控制
在可视化中,合理控制色彩范围可以突出数据的分布特征。scripts/tip-color-range.py展示了如何通过设置vmin和vmax参数来控制色彩的显示范围。
# 色彩范围控制示例(源自tip-color-range.py)
np.random.seed(1)
X = np.random.randn(1000, 4)
cmap = plt.get_cmap("Oranges")
colors = [cmap(i) for i in [.1, .3, .5, .7]] # 使用色彩映射表生成特定范围的颜色
ax.hist(X, 2, density=True, histtype='bar', color=colors)
颜色条(Colorbar)设置
颜色条是解释图表中颜色含义的重要组件。scripts/tip-colorbar.py展示了如何添加和自定义颜色条。
# 颜色条设置示例(源自tip-colorbar.py)
np.random.seed(1)
Z = np.random.uniform(0, 1, (8, 8))
cmap = plt.get_cmap("Oranges")
im = ax.imshow(Z, interpolation="nearest", cmap=cmap, vmin=0, vmax=2)
cb = fig.colorbar(im, fraction=0.046, pad=0.04) # 添加颜色条
cb.set_ticks([]) # 自定义颜色条刻度
色彩对比度与可读性
确保文本与背景的色彩对比度足够高,是提升图表可读性的关键。在scripts/colors.py中,通过计算亮度(luminance)来动态选择文本颜色,确保文本在不同背景色上都具有良好的可读性。
# 色彩对比度计算(源自colors.py)
alpha = C[0, :, 3]
rgb = C[0, :, :3] * alpha[:, np.newaxis] + (1 - alpha[:, np.newaxis])
luma = 0.299 * rgb[:, 0] + 0.587 * rgb[:, 1] + 0.114 * rgb[:, 2]
text_color = "black" if luma[i] > 0.5 else "white" # 根据亮度选择文本颜色
项目资源与扩展学习
官方文档与教程
- 项目教程:README.md
- 官方文档:docs/index.rst
色彩相关脚本
- 基础色彩示例:scripts/colors.py
- 色彩映射表示例:scripts/colormaps.py
- 颜色名称示例:scripts/colornames.py
- 色彩范围示例:scripts/tip-color-range.py
- 颜色条示例:scripts/tip-colorbar.py
样式文件
Matplotlib的样式文件可以统一设置图表的色彩风格,项目中提供了多个预定义样式:
通过本文的介绍,你已经掌握了Matplotlib色彩系统的核心知识和实战技巧。合理运用这些色彩工具和方法,将使你的数据可视化作品更加专业、清晰和具有吸引力。建议进一步探索项目中的示例脚本,尝试修改参数来观察色彩变化效果,逐步形成自己的色彩运用风格。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



