[Python] 색상 플롯 및 색상 막대에서 두 개 이상의 특정 값에 개별 색상 추가


Answers

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()

값 범위의 경우 먼저 값을 범위 인덱스로 변환 할 수 있습니다.

Question

컬러 플롯에 매트릭스를 표시하고 두 개 이상의 특수 값에 특정 색상을 지정하고 싶습니다.

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()

행렬의 값은 다음과 같습니다.

[[ 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 항목에 흰색을 할당하고 싶습니다. 그리고 두 개의 개별 색상으로 1 번 아래의 색상 막대에 표시하고 싶습니다. 다음은 사진 편집 기술이 잘 안된다는 예입니다. 그러나 원하는 것은 분명해야합니다 (컬러 바를 저울로 사용해야합니다).
저에게 jet 컬러 맵을 연속적으로 사용하는 것은 중요하지 않습니다. 제 컬러 막대가 분리되어있는 솔루션에 만족할 것입니다. 예를 들어 10 가지 색상으로 구성되어 있습니다. 그 중 2 개는 흑백이고 8 개는 jet 색상지도 색상. 그러나 값의 전체 범위가 무엇이든 관계없이 -1과 0에 별개의 색이 있어야합니다.
예를 들어 값 범위가 -1에서 1000 사이 인 경우 :




@ newPyUser의 의견에 응답하여 ...

나는 @ HYRY의 마술이 이런 식으로 일어난다 고 생각한다 .

검정색 (colors [0])과 흰색 (colors [1])의 2 가지 RGB 요소로 구성된 목록 colors = [(0.0,0.0,0.0),(1.0,1.0,1.0)] 그런 다음 나머지 2-item리스트의 끝 부분, 즉 0에서 N-1까지의 값을 1 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) 하면 -1이 매핑됩니다. (색상 [0])으로 매핑되고 0이 흰색으로 매핑됩니다 (색상 [1])