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

实现colorbar自由还是得靠自己啊:
官方文档:https://matplotlib.org/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 mpl
import numpy as np
import matplotlib.pyplot as plt
tem = np.zeros((100,100))
tem[:]=np.nan
cdict = {'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 mpl
import numpy as np
import matplotlib.pyplot as plt
tem = np.zeros((100,100))
tem[:]=np.nan
cdict = {'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 mpl
import numpy as np
import matplotlib.pyplot as plt
tem = np.zeros((100,100))
tem[:]=np.nan
cmap0=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:
在这里插入图片描述

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值