0

プロットしている2D配列がimshowあり、配列の各ピクセルの値に応じてコスタムカラーを使用したいと思います。例を挙げて説明します。

from pylab import *
from numpy import *

img = ones((5,5))
img[1][1] = 2

imshow(img,interpolation='nearest');colorbar()

このコードを実行すると、青い背景に赤い四角が表示されます。赤い四角はのピクセルに対応し[1][1]img他のピクセルは値が1であるため青に着色されています。赤い四角をカスタム色で着色したい場合はどうすればよいですか?または、より一般的には、例のように2D配列がimgある場合、選択できる色で同じ値のピクセルに色を付けるにはどうすればよいですか。

カスタムカラーバーを生成する方法を説明しているこのページを見つけましたが、それは役に立ちません:http ://www.scipy.org/Cookbook/Matplotlib/Show_colormaps

4

1 に答える 1

3

あなたが送信したリンクには次のものがあります。

しかし、これらのカラーマップが醜いと思う場合はどうすればよいでしょうか? さて、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)
于 2012-08-22T12:42:11.787 に答える