写在前面:
长夜路漫漫,感谢每个愿意帮助其他Programmer的人,感恩!
在使用matplotlib画图过程中突发奇想,除了官方库中提供的调色盘中的颜色,是否能够利用别的调色盘(颜色库,例如NCL)的颜色,这就涉及matplotlib库中的颜色到底是怎么调用出来的问题,在此指路:Creating Colormaps in Matplotlib — Matplotlib 3.8.3 documentation
官方介绍的比较清楚啦!
接下来,就以NCL中的颜色为例,介绍如何调用。首先,你需要先装上cmaps这个库,以及在NCL颜色库中选择一个colorbar。NCL指路:vegetation_modis color table (ucar.edu)
例子中使用到的colorbar的名字为:vegetation_modis 可以看到其中包含21种颜色。
查看vegetation_modis中各个颜色的RGBA信息:
import cmaps # 在这里导入NCL库中的一个colorbar,并且将其读成一个颜色列表 newcolors = cmaps.vegetation_modis (np.linspace(0, 1, 21)) newcolors
可以看到输出的颜色列表中已经有了21种颜色对应的RGBA信息。
何谓RGBA呢?RGB或RGBA(红、绿、蓝、alpha) 浮点值的元组 间隔[0,1]
颜色的alpha值指定了它的透明度,其中0表示完全透明 透明和1是完全不透明的。当一种颜色是半透明的时候 背景颜色会显示出来。
表格中的四列就分别对应"R"、"G"、"B"、"A"的参数。那么,我现在要调用vegetation_modis中的三种颜色怎么办呢?
#命名三个取出来的颜色为sand1、sand2、sand3,按照表格中的参数创建一个数组如下 sand1 = np.array([0.88235294/1, 0.49019608/1, 0/1, 1]) sand2 = np.array([0.33333333/1, 0/1, 0/1, 1]) sand3 = np.array([0/1, 0.88235294/1, 0/1, 1]) #创建一个列表用于保存你需要的颜色 a = [sand1, sand2, sand3]# 把这三个颜色组成的列表 newcmp = ListedColormap(a)# 从颜色列表创建colarmap对象
那么至此,专属于你的colormap就已经定制好了接下来就是"cmap = newcmp"就可以使用啦!
newcmp预览完整代码如下:
import cmaps # 在这里导入NCL库中的一个colorbar,并且将其读成一个颜色列表 newcolors = cmaps.vegetation_modis (np.linspace(0, 1, 21)) print(newcolors)# 输出颜色列表 # 把你需要的颜色取出来 sand1 = np.array([0.88235294/1, 0.49019608/1, 0/1, 1]) sand2 = np.array([0.33333333/1, 0/1, 0/1, 1]) sand3 = np.array([0/1, 0.88235294/1, 0/1, 1]) # 将取出来的颜色保存在列表中 a = [sand1, sand2, sand3] # 生成一个colormap对象 newcmp = ListedColormap(a) # plot_examples([cmaps.CBR_drywet, newcmp]) plot_examples([newcmp])
结果:
感谢你能看到这!