あなたが送信したリンクには次のものがあります。
しかし、これらのカラーマップが醜いと思う場合はどうすればよいでしょうか? さて、matplotlib.colors.LinearSegmentedColormap を使用して独自のものを作成してください。まず、範囲 (0,1) を RGB スペクトルの値にマップするスクリプトを作成します。このディクショナリには、「赤」、「緑」、「青」の各色の一連のタプルがあります。これらの各色系列の最初の要素は、0 から 1 までの任意の間隔で並べる必要があります。ここで、以下の「赤」シリーズの (0.5, 1.0, 0.7) を考えてみましょう。このタプルは、 (0,1) からの範囲の 0.5 で、下から 1.0 まで補間し、上から 0.7 まで補間することを示しています。多くの場合、各タプルの 2 番目の 2 つの値は同じですが、異なる値を使用すると、カラーマップに区切りを入れるのに役立ちます。これは、次の単純なスクリプトで示されているように、聞こえるよりも簡単に理解できます。
1 from pylab import *
2 cdict = {'red': ((0.0, 0.0, 0.0),
3 (0.5, 1.0, 0.7),
4 (1.0, 1.0, 1.0)),
5 'green': ((0.0, 0.0, 0.0),
6 (0.5, 1.0, 0.0),
7 (1.0, 1.0, 1.0)),
8 'blue': ((0.0, 0.0, 0.0),
9 (0.5, 1.0, 0.0),
10 (1.0, 0.5, 1.0))}
11 my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
12 pcolor(rand(10,10),cmap=my_cmap)
13 colorbar()
これはまさにあなたが望むものではありませんか?
提供した画像でそれを行う方法の例を次に示します。
import matplotlib
from matplotlib import pyplot as plt
from pylab import *
img = ones((5,5))
img[1][1] = 2
cdict = {'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 0.7),
(1.0, 1.0, 1.0)),
'green': ((0.0, 0.0, 0.0),
(0.5, 1.0, 0.0),
(1.0, 1.0, 1.0)),
'blue': ((0.0, 0.0, 0.0),
(0.5, 1.0, 0.0),
(1.0, 0.5, 1.0))}
my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
plt.pcolor(img,cmap=my_cmap)
plt.colorbar()
plt.show()
また、実際に数値を色にマップする場合は、リンク先の例で指定されている Discrete_cmap を使用できます。scipy のドキュメントで提供されているメソッドの例を次に示します。
def discrete_cmap(N=8):
"""create a colormap with N (N<15) discrete colors and register it"""
# define individual colors as hex values
cpool = [ '#bd2309', '#bbb12d', '#1480fa', '#14fa2f', '#000000',
'#faf214', '#2edfea', '#ea2ec4', '#ea2e40', '#cdcdcd',
'#577a4d', '#2e46c0', '#f59422', '#219774', '#8086d9' ]
cmap3 = col.ListedColormap(cpool[0:N], 'indexed')
cm.register_cmap(cmap=cmap3)