4

カラープロットでマトリックスを表示し、2つ以上の特別な値に特定の色を付けたいです。

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エントリに白色を割り当て、番号1の下のカラーバーに2つの個別の色として表示したいと思います。これが例です。私の写真編集スキルは貧弱ですが、私が何を望んでいるのかを明確にする必要があります(カラーバーは縮尺どおりである必要があります):
ここに画像の説明を入力してください 連続したjetカラーマップを持つことは私にとって重要ではありません。私のカラーバーは個別で、たとえば10色で構成され、そのうち2色は白黒で、8色はjetカラーマップの色です。ただし、値の合計範囲に関係なく、-1と0の色が異なることが重要です。
たとえば、値の範囲が-1から1000の場合:
ここに画像の説明を入力してください

4

2 に答える 2

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

ここに画像の説明を入力してください

値の範囲については、最初に値を範囲インデックスに変換できます。

于 2012-05-06T02:03:54.980 に答える
0

@newPyUserのコメントに応えて...

@HYRYの魔法はこのように起こると思います...

黒(colors [0])と白(colors [1])の2つのRGB要素で構成されるリスト 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])

于 2016-07-04T18:46:56.703 に答える