在绘制等高线图的时候,因为有些图的色卡是渐变的,有些又存在上下扩展,在配置色卡时就会有些混乱,所以后面通过自己创建colormap(简称cmap)对象来定义色标。
首先看需求给的色卡是什么样的,是否渐变以及扩展方式,然后给出对应的levels和colors列表。不同情况对应的颜色数如下表所示:


例如这个温度色卡,为非渐变且有上下扩展,则颜色数=等级数+1,其中等级数为31个,所以颜色数为32个。从图片可以直接将levels和colors配置出来,强调数量只是为了更好的理解。

然后通过ListedColormap类和LinearSegmentedColormap类来创建cmap。在Matplotlib中,原始数据映射到颜色的流程为:原始数据→归一化数据→颜色数据。对于Colormap对象,只接受范围0~1的数。
ListedColormap实现的颜色完全源于创建时提供的颜色。LinearSegmentedColormap则使用线性插值的方式对提供的颜色实现连续化。渐变colors数据的生成是按比例去计算颜色对应的位置,需要考虑下起始位置是否为0的情况。

最后将cmap传给matplotlib.pyplot.contourf函数绘制等高线图:

绘制效果如下:

改为渐变色卡的效果:
