我想在彩色图中显示矩阵,并为两个或更多特殊值赋予特定颜色。
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()
以下是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]]
这是情节:
我想为所有-1个条目分配黑色,为所有0个条目分配白色,我希望它在第一个下面的颜色条上显示为两个离散颜色。这是一个例子,我的照片编辑技巧很差,但应该清楚我想要的东西(颜色条应该是比例尺):
有一个连续的jet
彩色地图对我来说并不重要,我会满意的解决方案,我的颜色条将是离散的,并由例如10种颜色组成,其中两种颜色为黑色和白色,8来自jet
彩色地图颜色。然而,重要的是-1和0具有不同的颜色,无论总的值范围是多少
例如,如果值范围是-1到1000:
答案 0 :(得分: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()
对于值范围,您可以先将值转换为范围索引。
答案 1 :(得分:0)
回应@ newPyUser的评论......
我认为 @ HYRY的魔法以这种方式发生......
由2个RGB元素组成的列表,即黑色(颜色[0])和白色(颜色[1])
colors = [(0.0,0.0,0.0),(1.0,1.0,1.0)]
然后将剩余的色彩空间附加到2项目列表的末尾,即从0到N-1的值,步长为1
colors.extend(mpl.cm.jet(np.linspace(0, 1, N-1)))
最后构建从-1到N-1定义的cmap
cmap = mpl.colors.ListedColormap(colors)
mat=ax.matshow(a, cmap=cmap, vmin=-1, vmax=N-1)
那样-1被映射到黑色(colors [0]),0被映射到白色(colors [1])