matplotlib 合并cmap,创建cmap,创建listedcolormap

发布时间:2023-10-29 08:00

python中matplotlib内置的离散cmap中颜色有限,最多的tab20也只有20个颜色,为了获得包含更多颜色的cmap,最简单的方法就是合并内置cmap,创建新的。

这里是考虑的离散cmap,如果是连续cmap,就不存在颜色个数不够用的情况了。

零、需求

如下图所示,内置的qualitative系列包含下列离散cmap,最多只有20种颜色。

鉴于tab20b和tab20c的颜色各不相同,因此考虑合并它们得到一个新的cmap,可以直接用于更多颜色需求的图像绘制。

\"matplotlib

一、cmap相关操作

1. 函数get_cmap()通过指定str,获取相应cmap:

\"\"

2. cmap实例其实类似于一个字典,以float形式输入[0, 1]之间的数字,能够得到对应的颜色rgba值(输入数字如果大于1,cmap会自动对其进行正则化)。

由于离散cmap中颜色个数有限,实际上一定范围内的float值对应的颜色是一样的。

\"\"

 

3. 使用cmap.colors可以获得该cmap中包含的所有颜色的rgb值。

可以看出cmap中所有colors是以tuple的形式保存的。

\"matplotlib

 

4. cmap是ListedColormap实例,因此我们创建新的cmap也要借助该类型。

ListedColormap类可以通过接收一个colors的列表来创建cmap实例,因此考虑将合并后的总colors传给ListedColormap类,以此实现新cmap的创建。

\"matplotlib

 上述代码可以看出,新创建的cmap拥有和内置cmap一样的性质和属性。

二、代码实例

下面给出完整代码,运行下面代码,新创建的new_cmap能够和内置cmap一样直接在scatter等画图函数中直接使用。

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np

cmap1 = plt.get_cmap(\'tab20b\')
cmap2 = plt.get_cmap(\'tab20c\')
new_cmap = ListedColormap(cmap1.colors+cmap2.colors)

x = np.random.random([40, 2])
cluster_labels = np.arange(40)
plt.figure(figsize=[12, 8])
plt.scatter(x[:, 0], x[:, 1], s=500, c=cluster_labels, cmap=new_cmap, marker=\'o\', linewidths=2)
plt.colorbar()
plt.show()

上述代码运行结果如下,可以看出,40个数据点颜色各不相同,实现了对两个内置cmap的合并。

\"matplotlib

三、总结

如果需要更多颜色,可以自行合并想要的内置cmap,创建新的可用cmap。

 

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号