1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 解析matplotlib.colors.LinearSegmentedColormap中的字典颜色分割 自定义colorbar

解析matplotlib.colors.LinearSegmentedColormap中的字典颜色分割 自定义colorbar

时间:2021-06-20 04:12:21

相关推荐

解析matplotlib.colors.LinearSegmentedColormap中的字典颜色分割 自定义colorbar

实现colorbar自由还是得靠自己啊:

官方文档:/devdocs/api/_as_gen/matplotlib.colors.LinearSegmentedColormap.html?highlight=colors%20linearsegmentedcolormap%20from_list#matplotlib.colors.LinearSegmentedColormap.from_list

第一眼看到这个cdict真的挺晕的,不过仔细分析就很容易看明白啦。

首先,这里用的是RGB来调色

以’red’为例,我们来看看这个3*3的矩阵,每行的三个数字分别对应为x,y0和y1,x代表了这个颜色在colorbar上的位置,比如0就是colorbar的最小值,1是colorbar的最大值,所以x必须单调增加;然后其实真的需要看的就是每一行的y1和下一行的y0,这个函数其实就是在对应的x位置将y1-y0进行了差值(如上图所示),所以说,第一行的y0和第三行的y1其实设置为多少都不影响最终的结果,因为第一行的y0没有对应的上一行的y1,最后一行的y0没有对应下一行的y0,所以这俩数就是来占位的,明白了这一点这个矩阵应该就明白了。

下面是两个例子供大家理解:

import matplotlib as mplimport numpy as npimport matplotlib.pyplot as plttem = np.zeros((100,100))tem[:]=np.nancdict = {'red': [(0.0, 0.0, 0.0),(0.5, 0.5, 0.5),(1.0, 1.0, 0.0)],'green': [(0.0, 0.0, 0.0),(0.5, 0.0, 0.0),(1.0, 0.0, 0.0)],'blue': [(0.0, 0.0, 0.0),(0.5, 0.0, 0.0),(1.0, 0.0, 0.0)]}cmap = mpl.colors.LinearSegmentedColormap('cmap', cdict, 256)plt.imshow(tem,cmap = cmap)plt.colorbar()

import matplotlib as mplimport numpy as npimport matplotlib.pyplot as plttem = np.zeros((100,100))tem[:]=np.nancdict = {'red': [(0.0, 0.0, 0.0),(0.5, 1.0, 0.0),(1.0, 1.0, 0.0)],'green': [(0.0, 0.0, 0.0),(0.5, 0.0, 0.0),(1.0, 0.0, 0.0)],'blue': [(0.0, 0.0, 0.0),(0.5, 0.0, 0.0),(1.0, 0.0, 0.0)]}cmap = mpl.colors.LinearSegmentedColormap('cmap', cdict, 256)plt.imshow(tem,cmap = cmap)plt.colorbar(orientation = 'horizontal')

除了用cdict来定义colorbar,我们还可以使用颜色列表来定义,mpl会自动对这些颜色列表进行插值,我认为也是很好用的,比如说我认为bwr这个色条两端颜色太深了,我就可以选出来中间的一段色条重新构建colorbar:

import matplotlib as mplimport numpy as npimport matplotlib.pyplot as plttem = np.zeros((100,100))tem[:]=np.nancmap0=plt.get_cmap('bwr',12)bwr_10 = mpl.colors.LinearSegmentedColormap.from_list('bwr_10', cmap0(np.arange(1,11)), 10)#The number of rgb quantization levels.如果想要分级的colorbar,这里的数值就和级数相同即可#如果想要连续的这里就调成255肉眼就看不出来了plt.imshow(tem,cmap = 'bwr')plt.colorbar(orientation = 'horizontal')plt.imshow(tem,cmap = bwr_10)plt.colorbar(orientation = 'horizontal')

bwr:

bwr_10:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。