web-dev-qa-db-ja.com

Pythonカラーマップですが、すべてゼロの値が黒にマップされています

格子サイトに対応する要素の正方形の配列があります。一部の要素はゼロで、残りは1から約2700の間で変化します。imshowとOrRdカラーマップを使用して、0より大きいすべての格子サイトに対応する色を表示させますが、重要なのは値が0から黒で表示されます。次のように新しいカラーマップを定義してみました。

colors = [(0,0,0)] + [(pylab.cm.OrRd(i)) for i in range(1,256)] 
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

しかし、私の配列の値の範囲が大きすぎるため、ゼロ以外の値の多くが黒で表示されます。

どうもありがとう。

12
Thomas Hopkins

Matplotlibのカラーマップには、これに使用できるset_badおよびset_underプロパティがあります。この例は、set_badの使用方法を示しています。

import matplotlib.pyplot as plt
import numpy as np

# make some data
a = np.random.randn(10,10)

# mask some 'bad' data, in your case you would have: data == 0
a = np.ma.masked_where(a < 0.05, a)

cmap = plt.cm.OrRd
cmap.set_bad(color='black')

plt.imshow(a, interpolation='none', cmap=cmap)

enter image description here

set_underバリアントを使用するには、プロットコマンドにvminキーワードを追加する必要があり、設定はゼロより少し上です(ただし、他の有効な値より下です)。

cmap.set_under(color='black')    
plt.imshow(a, interpolation='none', cmap=cmap, vmin=0.0000001)
19
Rutger Kassies