使用matshow时matplotlib中的自定义颜色

时间:2017-05-11 02:44:07

标签: python matplotlib

使用matplotlib时,是否有一种简单的方法可以指示给定矩阵的每个元素的特定颜色。例如,假设我们想要显示' x'如下三种特定颜色:红色,黑色和白色:

enter image description here

然而,我发现的唯一选择是使用" cmap"它没有直接给你选择"直接"指定颜色。

fig = plt.figure()
ax = fig.add_subplot(111)
x= [[0,0,0,0,0,0],[0,0,0,0,0,0], [0,1,1,2,1,1], [0,0,0,0,0,1], [0,1,1,1,1,1]]    
cax = ax.matshow(x,cmap=plt.cm.gray_r )
plt.show()

enter image description here

我的问题:如何更改我的代码以显示上面的红色/黑色/白色网格? [例如0表示黑色,1表示白色,2表示红色],一般来说我们如何才能获得更大的颜色列表?喜欢10-15种颜色。

另外,如何在matix中为某个元素指定一定的颜色?例如,在上面,x [i] [j] == 0然后颜色='黑色'或x [i] [j] == 2然后color =' red'

感谢。

1 个答案:

答案 0 :(得分:10)

您可以创建自己的颜色贴图:

from matplotlib.colors import ListedColormap

cmap = ListedColormap(['k', 'w', 'r'])
cax = ax.matshow(x,cmap=cmap)

enter image description here

如果要指定10-15种颜色,可能会用完单字母颜色。在这种情况下,您可以指定RGB三元组(例如ListedColormap([[0, 0, 0], [1, 1, 1], [1, 0, 0]]))或其他各种color formats。或者,使用列出here列出的预定义离散(“定性”)色彩图之一。

如果矩阵中的值不是连续的整数,则可以在绘图之前对它们进行变换。

import numpy as np

x = np.array([[0,0,0,0,0,0],[0,77,0,0,22,0], [0,1,1,2,1,1], [0,0,14,0,0,1], [0,1,1,1,1,1]])
u, i = np.unique(x, return_inverse=True)
y = i.reshape(x.shape)
# array([[0, 0, 0, 0, 0, 0],
#        [0, 5, 0, 0, 4, 0],
#        [0, 1, 1, 2, 1, 1],
#        [0, 0, 3, 0, 0, 1],
#        [0, 1, 1, 1, 1, 1]])