在颜色图和颜色条中为两个(或更多)特定值添加单独的颜色

ene*_*ene 4 python numpy matplotlib

我想在颜色图中显示矩阵,并为两个或更多特殊值指定特定颜色.

import numpy as np
from pylab import *

np.random.seed(10)    
a=np.random.randint(-1,10, size=(5, 5))
print a

fig, ax = plt.subplots()
mat=ax.matshow(a, cmap=cm.jet, vmin=1, vmax=10)
colorbar(mat)
show()
Run Code Online (Sandbox Code Playgroud)

以下是a矩阵的值:

[[ 8  3 -1  0  8]
 [-1  0  9  7  8]
 [-1  9  7  5  3]
 [ 2 -1  3  5  7]
 [ 9  0  7  3  0]]
Run Code Online (Sandbox Code Playgroud)

这是情节: 在此输入图像描述
我想为所有-1个条目分配黑色,为所有0个条目分配白色,我希望它在第一个下面的颜色条上显示为两个离散颜色.这是一个例子,我的照片编辑技巧很差,但应该清楚我想要的东西(颜色条应该是比例尺):
在此输入图像描述 有一个连续的jet彩色地图对我来说并不重要,我会满意的解决方案,我的颜色条将是离散的,并由例如10种颜色组成,其中两种颜色是黑色和白色,8种jet颜色映射颜色颜色.然而,重要的是-1和0具有不同的颜色,无论值的总范围是多少.
例如,如果值范围是-1到1000:
在此输入图像描述

HYR*_*YRY 8

您可以使用ListedColormap:

import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt

N = 10

np.random.seed(10)    
a=np.random.randint(-1, N, size=(5, 5))
print a

fig, ax = plt.subplots()

colors = [(0.0,0.0,0.0),(1.0,1.0,1.0)]
colors.extend(mpl.cm.jet(np.linspace(0, 1, N-1)))
cmap = mpl.colors.ListedColormap(colors)
mat=ax.matshow(a, cmap=cmap, vmin=-1, vmax=N-1)
cax = plt.colorbar(mat, ticks=np.linspace(-0.5, N-1-0.5, N+1))
cax.set_ticklabels(range(-1, N))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

对于值范围,您可以先将值转换为范围索引.