Matplotlib 简明教程
Matplotlib - Choosing Colormaps
Colormap 也被称为调色板,是一系列颜色,代表了一系列连续的值。它允许您通过颜色的变化有效地表示信息。
请参阅下列图片,其中引用了一些 matplotlib 中的内置 colormaps:
Matplotlib 提供了各种内置 colormaps(可以在 matplotlib.colormaps 模块中找到)和第三方 colormaps 以用于各种应用程序。
Choosing Colormaps in Matplotlib
选择合适的 colormap 涉及为你的数据集在 3D 颜色空间中找到合适的表示方式。
选择任何给定数据集的适用 colormap 的因素包括:
-
Nature of Data − 表示形式数据还是度量数据
-
Knowledge of the Dataset − 理解数据集的特点。
-
Intuitive Color Scheme − 考虑是否有针对要绘制的参数的直观配色方案。
-
Field Standards − 考虑是否有受众可能期望的行业标准。
对于大多数应用程序,建议使用感知一致的 colormap,确保数据中的相等步长在颜色空间中被感知为相等步长。这改进了人脑解释,特别是当明度变化比色调变化更明显时。
Categories of Colormaps
Colormaps 根据其功能分类:
-
Sequential − 明度和饱和度的逐步变化,通常使用单色调。适合表示有序的信息。
-
Diverging − 两色的明度和饱和度变化,在非饱和色处相交。非常适合具有临界中间值的数据,例如地形或围绕零点偏离的数据。
-
Cyclic − 两种颜色的明度变化,在中间相遇,并在非饱和色处开始/结束。适合在端点环绕值的情况,例如相位角或一天中的时间。
-
Qualitative − 不带特定顺序的杂色。用于表示无顺序或关系的信息。
Sequential Colormaps
顺序色图显示出在色图中递增的明度值。这种特性确保了色差感知的平滑过渡,使其适合表示有序信息。然而,值得注意的是,根据它们跨越的值的范围,色图之间的知觉范围可能有所不同。
让我们通过可视化渐变并了解其明度值如何演变来探索顺序色图。
以下示例提供了 Matplotlib 中可用的不同 Sequential 色图的渐变的可视表示。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
# List of Sequential colormaps to visualize
cmap_list = ['Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds',
'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu',
'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']
# Plot the color gradients
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
# Create figure and adjust figure height to the number of colormaps
nrows = len(cmap_list)
figh = 0.35 + 0.15 + (nrows + (nrows - 1) * 0.1) * 0.22
fig, axs = plt.subplots(nrows=nrows + 1, figsize=(7, figh))
fig.subplots_adjust(top=1 - 0.35 / figh, bottom=0.15 / figh,
left=0.2, right=0.99)
axs[0].set_title('Sequential colormaps', fontsize=14)
for ax, name in zip(axs, cmap_list):
ax.imshow(gradient, aspect='auto', cmap=mpl.colormaps[name])
ax.text(-0.1, 0.5, name, va='center', ha='right', fontsize=10,
transform=ax.transAxes)
# Turn off all ticks & spines, not just the ones with colormaps.
for ax in axs:
ax.set_axis_off()
# Show the plot
plt.show()
执行上述代码,我们将得到以下输出 −
Diverging Colormaps
分歧色图的特点是明度值先单调递增,然后再递减,最大明度接近于中性中点。
以下示例提供了 Matplotlib 中可用的不同分歧色图的渐变的可视表示。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
# List of Diverging colormaps to visualize
cmap_list = ['PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu',
'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic']
# Plot the color gradients
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
# Create figure and adjust figure height to the number of colormaps
nrows = len(cmap_list)
figh = 0.35 + 0.15 + (nrows + (nrows - 1) * 0.1) * 0.22
fig, axs = plt.subplots(nrows=nrows + 1, figsize=(7, figh))
fig.subplots_adjust(top=1 - 0.35 / figh, bottom=0.15 / figh,
left=0.2, right=0.99)
axs[0].set_title('Diverging colormaps', fontsize=14)
for ax, name in zip(axs, cmap_list):
ax.imshow(gradient, aspect='auto', cmap=mpl.colormaps[name])
ax.text(-0.1, 0.5, name, va='center', ha='left', fontsize=10,
transform=ax.transAxes)
# Turn off all ticks & spines, not just the ones with colormaps.
for ax in axs:
ax.set_axis_off()
# Show the plot
plt.show()
执行上述代码,我们将得到以下输出 −
Cyclic Colormaps
循环色图呈现出一种独特的设计,其中色图在同一种颜色上开始和结束,在对称中心点相遇。明度值的进展应从开始到中间单调变化,从中间到结束逆向变化。
在以下示例中,您可以探索和可视化 Matplotlib 中可用的各种循环色图。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
# List of Cyclic colormaps to visualize
cmap_list = ['twilight', 'twilight_shifted', 'hsv']
# Plot the color gradients
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
# Create figure and adjust figure height to the number of colormaps
nrows = len(cmap_list)
figh = 0.35 + 0.15 + (nrows + (nrows - 1) * 0.1) * 0.22
fig, axs = plt.subplots(nrows=nrows + 1, figsize=(7, figh))
fig.subplots_adjust(top=1 - 0.35 / figh, bottom=0.15 / figh,
left=0.2, right=0.99)
axs[0].set_title('Cyclic colormaps', fontsize=14)
for ax, name in zip(axs, cmap_list):
ax.imshow(gradient, aspect='auto', cmap=mpl.colormaps[name])
ax.text(-0.1, 0.5, name, va='center', ha='left', fontsize=10,
transform=ax.transAxes)
# Turn off all ticks & spines, not just the ones with colormaps.
for ax in axs:
ax.set_axis_off()
# Show the plot
plt.show()
执行上述代码,我们将得到以下输出 −
Qualitative colormaps
定性色图不同于知觉图,因为它们并非设计为提供知觉一致性,而是旨在表示不具有顺序或关系的信息。整个色图中的明度值差异很大,并且不会单调递增。因此,不建议将定性色图用作知觉色图。
以下示例提供了 Matplotlib 中可用的不同定性色图的可视表示。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
# List of Qualitative colormaps to visualize
cmap_list = ['Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2',
'Set1', 'Set2', 'Set3', 'tab10', 'tab20', 'tab20b', 'tab20c']
# Plot the color gradients
gradient = np.linspace(0, 1, 256)
gradient = np.vstack((gradient, gradient))
# Create figure and adjust figure height to the number of colormaps
nrows = len(cmap_list)
figh = 0.35 + 0.15 + (nrows + (nrows - 1) * 0.1) * 0.22
fig, axs = plt.subplots(nrows=nrows + 1, figsize=(7, figh))
fig.subplots_adjust(top=1 - 0.35 / figh, bottom=0.15 / figh,
left=0.2, right=0.99)
axs[0].set_title('Qualitative colormaps', fontsize=14)
for ax, name in zip(axs, cmap_list):
ax.imshow(gradient, aspect='auto', cmap=mpl.colormaps[name])
ax.text(-0.1, 0.5, name, va='center', ha='left', fontsize=10,
transform=ax.transAxes)
# Turn off all ticks & spines, not just the ones with colormaps.
for ax in axs:
ax.set_axis_off()
# Show the plot
plt.show()
执行上述代码,我们将得到以下输出 −