看过python数据可视化利器matplotlib,colors系列,颜色映射原理一文的同学,一定都还记得颜色映射的两个步骤:
通过数据转换类normalize或者子类的实例将包含数据的数组转换成区间[0,1]内的数字索引。
通过颜色映射类colormap或者子类的实例将区间[0,1]内的数字索引映射成颜色。
我们之前讲的三种数据转换方法——对数转换、有符号对数转换、乘方转换,虽然转换的方法不同,但均是将原始数据转换成[0,1]内的索引。而我们今天要学的范围转换法——boundarynorm,则完全不同,它并没有对数据进行转换,而是给定一个索引范围进行数据映射。
colors.boundarynorm(boundaries, ncolors, clip=false)
参数boundaries的值为单调递增数列。ncolors为我们希望在图像中用到的colormap中的颜色个数。
该方法的实现原理如下:
根据ncolors从指定的colormap的底部开始计数,取ncolors个颜色用于组成新的colormap,如果ncolors数值大于指定的colormap的颜色个数,超出的颜色均显示为colormap的最顶部的颜色。tips:内置的渐变色colormap的颜色个数通常为256。
根据数列boundaries的数字个数n,从第一步新生成的colormap中线性取n-1个颜色。
boundaries数列中每两个相邻数组成一个左闭右开的区间范围,区间范围个数为n-1,每个区间范围对应一个步骤2中的colormap颜色。
将原始数据与boundaries中的区间范围进行比较,数据在哪个区间范围里就显示哪个区间范围对应的颜色,如果数据超出了范围,则就近显示为最底部或最顶部颜色。
以原始数据=[1,3,5,7],boundaries=[2,4,6]为例讲解一下,boundaries可划分为[2,4),[4,6)两个区间范围,原始数据中1、3显示区间[2,4]对应的颜色,5、7显示区间[4,6]对应的颜色。
下面用一组例子将几种情况演示一下。
生成五十个[0,100]之间的整数。
boundaries为公差为1的0到100的等差数列,ncolors=256
boundaries为公差为10的0到100的等差数列,ncolors=256
boundaries为公差为1的50到100的等差数列,ncolors=256
boundaries为公差为1的0到100的等差数列,ncolors=125
boundaries为公差为1的0到100的等差数列,ncolors=400
tips:boundaries不必是等差数列,只要是单调递增就行。