ここには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()
これが生成します。今、私たちは同じことを行う を、しかし、離れて、我々は(黒に設定0
エントリから、cm.YlOrRd
と同じ値を持っているcolors
と呼ばれるリストを作成rgbで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番目のメリットの主な利点は、エントリを完全に任意にマスクすることができることです。