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

sup*_*ind 2 python matplotlib

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

在此输入图像描述

但是,我发现的唯一选项是使用"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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我的问题:如何更改我的代码以显示上面的红色/黑色/白色网格?[例如0表示黑色,1表示白色,2表示红色],一般来说我们如何为更大的颜色列表执行此操作?喜欢10-15种颜色.

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

谢谢.

kaz*_*ase 10

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

from matplotlib.colors import ListedColormap

cmap = ListedColormap(['k', 'w', 'r'])
cax = ax.matshow(x,cmap=cmap)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如果要指定10-15种颜色,可能会用完单字母颜色.在这种情况下,您可以指定RGB三元组(例如ListedColormap([[0, 0, 0], [1, 1, 1], [1, 0, 0]]))或各种其他颜色格式.或者,使用此处列出的预定义离散("定性")颜色映射之一.

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

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]])
Run Code Online (Sandbox Code Playgroud)