Pythonで独自のカスタムカラーマップを作成したいのですが、オンラインの例をいくつか調べて、コマンドを見つけました。
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
cdict1 = {'red': ((0.0, 0.0, 0.0),
(0.5, 0.0, 0.1),
(1.0, 1.0, 1.0)),
'green': ((0.0, 0.0, 0.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 1.0),
(0.5, 0.1, 0.0),
(1.0, 0.0, 0.0))
}
blue_red1 = LinearSegmentedColormap('BlueRed1', cdict1)
plt.imshow(big,interpolation='nearest', cmap=blue_red1, aspect='auto')
plt.colorbar()
plt.show()
上記のコマンドを使用すると、(赤-黒-青)のカラーマップが得られます。ここで、赤は最大、青は最小です。 (黒-白-黒)のカラーマップを作成したいと思います。誰かが何をすべきか、または他の方法を教えてもらえますか?
その価値については、もっと簡単な方法もあります。
LinearSegmentedColormap
の完全な形式では、同じカラーマップに「ハード」ストップとグラデーションを含めることができるため、必然的に複雑になります。ただし、説明するような単純なケースには便利なコンストラクターがあります。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
cmap = LinearSegmentedColormap.from_list('mycmap', ['black', 'white', 'black'])
fig, ax = plt.subplots()
im = ax.imshow(np.random.random((10, 10)), cmap=cmap, interpolation='nearest')
fig.colorbar(im)
plt.show()
3つのコンポーネントすべてを0と1の両方で0にし、3つすべてを0.5で1にする必要があります。だから、あなたは持っています:
cdict1 = {'red': ((0.0, 0.0, 0.0), # <- at 0.0, the red component is 0
(0.5, 1.0, 1.0), # <- at 0.5, the red component is 1
(1.0, 0.0, 0.0)), # <- at 1.0, the red component is 0
'green': ((0.0, 0.0, 0.0), # <- etc.
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0))
}
また、カラーマップの作成がわかりにくいことがわかりました。 LinearSegmentedColormap
は非常に柔軟性があるので便利ですが、cdict
には多少の慣れが必要です。
この方法でカラーマップを作成するための最初の(そしておそらく最も重要な)ことは、 RGBカラー を理解することです。基本的に、各色の強度値は0から1であり、値が高いほどその色が多くなります。 RGB色空間では、白は1
の3色すべてで表され、黒は0
の3色すべてで表されます。
この方法でカラーマップを作成する方法を学ぶために重要な2番目のことは、これです。単純な線形カラーマップの作成に慣れるまで、各タプルの2番目と3番目の値を常に同じにします。最終的には、これらの値を変更してカラーマップに不連続性を持たせることができますが、開始時に混乱するだけです。
OK、各タプルの最初の値はカラーマップの「分数」であり、これらは0から1まででなければなりません。2番目と3番目の値はその色の強度(下限と上限)です。したがって、「黒-白-黒」のカラーマップを作成するには、次のようにします。
cdict1 = {
'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
}
black_white_black = LinearSegmentedColormap('BlackWhiteBlack', cdict1)
例えば、
plt.imshow(np.arange(100).reshape(10,10), cmap=black_white_black, aspect='auto')
plt.colorbar()
幸運を!
のcdict1を試してください
cdict1 = {'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'green': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0))
}
この辞書は、赤、緑、青の各コンポーネントを個別に見て、色がどのように補間されるかを説明しています。コンポーネントごとに、そのコンポーネントの補間方法を指定する3タプル(x、y0、y1)のリストを指定すると、必要な各値がリスト内の2つのポイント間で補間されます。
この場合、黒[RGB =(0,0,0)]から始めて、データ範囲の中間点で白[RGB = 1,1,1]に増やし、次に黒に戻します。終わり。
色を割り当てる値ごとに、マップは最初にその値を入力範囲の一部に変換して、[0、1]の範囲にあるものを含めます。赤のコンポーネントのレベルを取得するために、マップは「赤」リストの各3タプルの最初の要素をスキャンし、分数を超えない最大の要素を取得します。割り当てられた赤レベルは、x値の差に基づいて、その3タプルのy1要素と次の3タプルのy0要素の間で補間されます。
青と緑のコンポーネントについても同様です。