一个合适的渐变色可以让我们的热图更加的美观,在matplotlib中内置了许多的渐变色,如何挑选合适的渐变色就诚成为了一个问题,这么多的渐变色,其分布有没有什么规律,挑选的时候有没有什么技巧呢?
答案是有的,matplotlib内置的渐变色可以分为以下4大类
1. sequential
2. diverging
3. cyclic
4. qualitative
每一大类都有各自的适用场景,下面来具体看下
1. sequential colormaps
sequential系列大多数都是在某种单一颜色的基础上,通过改变色彩的饱和度而形成的渐变色,所以适用于数值分布线性分布的情况,绝大多数情况下,该系列的渐变色可以作为首选。
在该系列中,又细分为以下3类
1. perceptually uniform sequential colormaps
2. sequential colormaps
3. sequential2 colormaps
第一类对应的渐变色图示如下
其中,viridis是matplotlib中热图的默认渐变色。第二类对应的渐变色图示如下
来源于ColorBrewer系列色彩中的单色。第三类对应的渐变色图示如下
2. diverging colormaps
该系列通常由两种颜色构成,从一种颜色过滤到另外一种颜色,先是饱和度组逐渐减小,再然后饱和度逐渐增大,具体的渐变色图示如下
该系列适合数据有中值和左右两个边界的情况,最经典的就是相关系数了,相关系数的取值范围为-1到1,-1到0是负相关,0到1是正相关,对于这样的数据,用该系列渐变色就特别的合适。
3. cycling colormaps
该系列的起点和终点是相同的颜色,中间可以混合多种颜色的渐变,具体的渐变色图示如下
对于围绕中心对称的数据,采用该系列比较合适。
4. qualitative colormaps
该系列适合数据是离散分布的情况,是有多个独立颜色组合而成的渐变色,具体的渐变色图示如下
除了以上4大类外,还有一类内置的,针对某种具体场景而开发的渐变色,称之为miscellaneouse colormaps, 具体的渐变色图示如下
内置的这一系列渐变色,已经能够满足绝大多数的需求了。当然,如果这些你都不满意,matplotlib也支持自定义渐变色,主要有以下两种方式
1. ListedColormap
2. LinearSegmentedColormap
第一种方式直接将单独的颜色合并构成一个颜色梯度,第二种方式则根据指定的颜色,通过颜色的渐变来形成颜色梯度,用法如下
from matplotlib.colors import ListedColormap, LinearSegmentedColormapcolors = ["darkorange", "gold", "lawngreen", "lightseagreen"]
cmap_list = ListedColormap(colors)
cmap1 = LinearSegmentedColormap.from_list("mycmap", colors)
用ListedColormap来绘制热图,代码如下
>>> import matplotlib.pyplot as plt>>> import numpy as np
>>> np.random.seed(123456789)
>>> data = np.random.rand(25).reshape(5, 5)
>>> plt.imshow(data, cmap = cmap)
>>> plt.colorbar()
输出结果如下
用LinearSegmentedColormap来绘制热图,代码如下
>>> import matplotlib.pyplot as plt>>> import numpy as np
>>> np.random.seed(123456789)
>>> data = np.random.rand(25).reshape(5, 5)
>>> plt.imshow(data, cmap = cmap1)
>>> plt.colorbar()
输出结果如下
matplotlib通过丰富的内置颜色梯度,以及灵活的自定义颜色梯度, 可以创建多种多样的热图,了解内置颜色梯度的适用场景,可以帮助我们快速的做出选择。
·end·
一个只分享干货的
生信公众号