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:
您可以使用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)
对于值范围,您可以先将值转换为范围索引.