これを行うには2つの方法があります。1 つは独自の を作成する方法colormap
、もう 1 つは を使用する方法masked array
です。私たちが持っているとしましょう:
import matplotlib
from pylab import *
data = np.arange(-50, 50).reshape(10, 10)
data = np.abs(data)
pcolor(data, cmap=cm.YlOrRd)
show()
これにより、次のようになります:
同じことを行いますが、黒 ( rgb で)に設定したエントリを除いて、と同じ値を持つ
という名前のリストを作成します。次に、実際にカラーマップを作成します。colors
cm.YlOrRd
0
0,0,0
LinearSegmentedColormap.from_list
import matplotlib
from pylab import *
data = np.arange(-50, 50).reshape(10, 10)
data = np.abs(data)
colors = [(0,0,0)] + [(cm.YlOrRd(i)) for i in xrange(1,256)]
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)
pcolor(data, cmap=new_map)
savefig('map.png')
show()
これは同じプロットを生成しますが、ゼロ値は黒です:
これは、マスクされた配列を使用する別の方法です。もう少し複雑です。コード内のコメントで手順が説明されています。
from pylab import *
import numpy.ma as ma
data=np.arange(-50,50).reshape(10,10)
data=np.abs(data)
#create a mask where only values=0 are true:
mask = data == 0
#create a masked array by combining our mask and data:
mx = ma.masked_array(data, mask)
#set masked values in cm.YlOrRd to 'black'
cm.YlOrRd.set_bad(color='black', alpha=None)
# pcolor(data,cmap=cm.YlOrRd)
#we must use pcolormesh instead of pcolor, as pcolor does not draw masked values at all
pcolormesh(mx,cmap=cm.YlOrRd)
show()
これにより、すぐ上と同じプロットが生成されます。
これらの方法には潜在的な違いがあります。最初の方法はデータ値を切り捨てて適切な色を適用しますが、2 番目の方法は 0 に等しい値のみを黒に設定します (つまり、0.001 はマスクされないため、適切な色になります)。cm.YlOrRd
色)。2 番目の主な利点は、エントリを完全に任意にマスクできることです。