发散型(Diverging) 对于发散型映射,我们希望其L*值单调递增至最大值,这个最大值应接近L*=100,然后是单调递减L*值。我们在颜色映射的两端寻找近似相等的最小值。通过这些措施,BrBG和RdBu是不错的选择。coolwarn也是一个不错的选择,但它不会跨越大范围的(L*)值(请参阅下面的灰度部分)。
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
import numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltfrom colorspacious import cspace_converter
cmaps = {}
gradient = np.linspace(0, 1, 256)gradient = np.vstack((gradient, gradient))
def plot_color_gradients(category, cmap_list): # Create figure and adjust figure height to 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=(6.4, figh)) fig.subplots_adjust(top=1 - 0.35 / figh, bottom=0.15 / figh, left=0.2, right=0.99) axs[0].set_title(f'{category} colormaps', fontsize=14)
for ax, name in zip(axs, cmap_list): ax.imshow(gradient, aspect='auto', cmap=mpl.colormaps[name]) ax.text(-0.01, 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()
# Save colormap list for later. cmaps[category] = cmap_list #show plt.show()
plot_color_gradients('Diverging', ['PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic'])
循环型(Cyclic) 对于循环型映射,我们希望开始和结束的颜色相同,并以中间为中心对称。(L*)应该从开始到中间单调变化,从中间到结束反向变化。它的增加和减少的两侧对称,并且只有色调(hue)上不同。在两端和中间,(L*)的变化方向相反,应该在(L*)维度中对其进行平滑,以减少伪影。有关循环型映射设计的更多信息,请参见[kovesi-colormaps]。 经常使用的HSV颜色映射也包含在这组颜色映射中,尽管它不是相对于中心点(中间)对称的。此外,(L*)值在整个颜色映射中变化很大,它表示的数据变化不易于被查看者感知,因此在展示数据上并不是个好的选择。请参阅〔mycarta-jet〕上对此想法(idea)的扩展。
·
plot_color_gradients('Cyclic', ['twilight', 'twilight_shifted', 'hsv'])
定性型(Qualitative) 定性映射并不旨在展示数据,查看亮度参数时可以验证这一点。(L*)值在整个映射中随处变化的,显然不是单调增加的。所以不是展示数据变化的好选择。
·
·
·
·
plot_color_gradients('Qualitative', ['Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'Set1', 'Set2', 'Set3', 'tab10', 'tab20', 'tab20b', 'tab20c'])
混杂型(Miscellaneous) 一些混杂型颜色映射是为特殊的用途而设立的。例如下图中,地球概览(gist_earth)、海洋(ocean)和地形(terrain)似乎都是为了将地形(绿色/棕色)和水深(蓝色)绘制在一起而创建的。那么,我们希望在这些颜色映射中看到差异(divergence),但多个扭结(kinks)可能并不理想,诸如在gist_earth和terrain中。创建CMRmap是为了很好地转换为灰度,尽管它在(L*)中似乎有一些小扭结。cubehelix在亮度和色调上的变化都平滑,但在绿色色调区域似乎有一个小凸起。turbo是用来显示深度和视差数据的。 经常使用的喷射(jet)颜色映射包含在这组颜色映射中。我们可以看到(下图),(L*)值在整个颜色映射中变化很大,这也使它表示的数据不易被观看者感知,因此在展示数据时,它也是个糟糕的选择。请参阅〔mycarta-jet〕和〔turbo〕上关于这一想法的扩展。
·
·
·
·
·
plot_color_gradients('Miscellaneous', ['flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern', 'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', 'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral', 'gist_ncar'])
kovesi-colormaps:
https://matplotlib.org/stable/tutorials/colors/colormaps.html#kovesi-colormaps
mycarta-jet:
https://matplotlib.org/stable/tutorials/colors/colormaps.html#mycarta-jet
turbo:
https://matplotlib.org/stable/tutorials/colors/colormaps.html#turbo