画图离不开色彩--说说matplot的cmap

一张好看的图,离不开各种各样的颜色。在matplot中,有一个cmap的概念,通过cmap,我们可以很方便的给多组数据自动分配色彩,画出很好看的图。这篇文章就简单介绍下cmap的概念和用法。

cmap是什么

cmap也就是colormap,可以理解为接受一个数值,输出一个指定的颜色的字典。下面这张图就展示了常见的一些cmap。

可以点击matplot cmap这里,里面有一个demo示例,会画一个包含matplot中所有cmap的图。

这里常见的cmap有:

纯色渐变系列:

比如说画灰度图的话,可以选择Greys这个cmap。

如何在画图中使用cmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import matplotlib.pyplot as plt
import numpy as np

n = 1024 # data size
X = np.random.normal(0, 1, n) # 每一个点的X值,平均数是0,方差是1
Y = np.random.normal(0, 1, n) # 每一个点的Y值

# 这里我们每个点的颜色和该点的X值+Y值的和相关
color = X + Y

# 使用我们上面说的灰度图
cmap = plt.get_cmap('Greys')
# cmap = plt.cm.Greys #也可以这么写
# 利用normlize来标准化颜色的值
norm = plt.Normalize(vmin=-3, vmax=3)

# 散点图
plt.scatter(X, Y, s=75, alpha=0.5, c=color, cmap=cmap, norm=norm)

plt.xlim(-1.5, 1.5)
plt.xticks(()) # ignore xticks
plt.ylim(-1.5, 1.5)
plt.yticks(()) # ignore yticks

plt.show()

其中,我们用到了matplotlib.colors.Normalize类,比如说我们的颜色对应的值取值范围在[-10, 10]之间和[-1,1]之间肯定是不能套用同一个转换标准的,通过Normalize标准化,我们可以很方便的将我们的实际值合适的分布到color map上。

我们讲colormap换成

1
cmap = plt.get_cmap('Spectral')

画出来的图的颜色就是下面这样的: