在使用Python扩展库Matplotlib进行可视化时,不少函数支持使用参数cmap指定配色方案。例如,下面的代码模拟了一个3像素的图像并设置了Blues配色方案,实现了从白色到蓝色(蓝色分量饱和度从0到100%)的渐变,根据像素的值插值计算合适的颜色进行填充。
下面的代码设置了Blues_r配色方案,后缀_r表示反向映射,插值计算的方向与Blues相反。其他配色方案中带或不带后缀_r的一对也是插值填充方向相反。
下面的代码修改了像素的值,可以发现,配色方案把图像中最大值像素填充为白色,最小值像素填充为蓝色,并不关心具体的值,只关心值的范围和分布情况。也就是说,三像素图像300、800、200和三像素图像3、8、2的填充结果是一样的。
Matplotlib预置了166个配色方案,下面的代码可以列出Matplotlib预置的全部配色方案:
这些配色方案大致可以分为下面的几类:
1)Sequential:在两种色调之间近似平滑变化,通常是从低饱和度(例如白色)到高饱和度(例如明亮的蓝色)。颜色过度自然,容易和连续的数字对应。例如,'Blues', 'BuGn', 'BuPu', 'GnBu', 'Greens', 'Greys', 'Oranges', 'OrRd', 'PuBu', 'PuBuGn', 'PuRd', 'Purples', 'RdPu', 'Reds', 'YlGn', 'YlGnBu', 'YlOrBr', 'YlOrRd', 'afmhot', 'autumn', 'bone', 'cool', 'copper', 'gist_heat', 'gray', 'hot', 'pink', 'spring', 'summer', 'winter'以及对应的反方向配色方案都属于这一类型。
2)Uniform:标准色两端对比大,整体饱和度高,颜色鲜亮。例如,'viridis', 'inferno', 'plasma', 'magma'以及对应的反方向配色方案都属于这一类型。
3)Diverging:具有中间值(通常是浅色),并在高值和低值处平滑变化为两种不同的色调,两端对比大,但是用白色、灰色过度,整体偏灰。Cyclic和Diverging相反,两端偏灰,但中间颜色对比鲜明。例如,'BrBG', 'bwr', 'coolwarm', 'PiYG', 'PRGn', 'PuOr', 'RdBu', 'RdGy', 'RdYlBu', 'RdYlGn', 'Spectral', 'seismic'以及对应的反方向配色方案都属于这一类型。
4)Qualitative:离散化色图,效果离散、跳跃,不同颜色区别很大。例如,'Accent', 'Dark2', 'Paired', 'Pastel1', 'Pastel2', 'Set1', 'Set2', 'Set3'以及对应的反方向配色方案都属于这一类型。
5)Miscellaneous:其他配色方案,例如'gist_earth', 'terrain', 'ocean', 'gist_stern', 'brg', 'CMRmap', 'cubehelix', 'gnuplot', 'gnuplot2', 'gist_ncar','nipy_spectral', 'jet', 'rainbow', 'gist_rainbow', 'hsv', 'flag', 'prism'以及对应的反方向配色方案。
下面的代码分别使用Matplotlib预置的166种配色方案对同一个图像进行填充并展示了不同配色方案的效果。
运行结果如下:
为方便比较同一组配色方案的插值方向,修改上面的代码如下(请自行发现修改之处):
运行结果如下:
下面代码演示了如何在绘制三维曲面时指定配色方案:
下面代码演示了如何在绘制散点图时设置配色方案: