2012-05-10 11 views
6

可能な重複して擬似カラープロットで任意の色を設定する:
Add separate colors for two (or more) specific values in color plot and color barはmatplotlibの

私は、値の配列を持っていると私はmatplotlibの中でこれらの使用pcolorのをプロットしたいと思います。私はカラーマップ 'YlOrRd'を使用していますが正常に動作しますが、ゼロ以外のすべての値にカラーマップを使用したいと思います。つまり、0以外のすべての値はカラーマップを使用する必要があります.0を黒にしたいと思います。

現在、私は数値の配列 'x'のために使用しています。

pcolor(x,cmap=cm.YlOrRd) 

0から黒までの配列xのすべての値を任意に修正する方法はありますか?

ありがとう、 Dave。

答えて

5

ここには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() 

これが生成します。今、私たちは同じことを行う enter image description here を、しかし、離れて、我々は(黒に設定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() 

これは、同じプロットを生成するが、ゼロ値は黒です:ここでは

enter image description here は、マスクされた配列を使用して他の方法は、その少し複雑です、コード内のコメントには、手順を説明します。

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番目のメリットの主な利点は、エントリを完全に任意にマスクすることができることです。