fc2ブログ
自前のcolormapを用意する
matplotlibのcolormapは豊富なので、普段はそこから選べば良いのですが、他のツールで作った画との整合性など、自前でcolormapを用意したいときもあります。基本的には、ここの説明に従えば良いんですが、ちょっと英語が何言ってるか分からなかったので、日本語解説メモしておきます。

from matplotlib.colors import LinearSegmentedColormap
cdict1 = {'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 1.0, 1.0)),

'green': ((0.0, 1.0, 1.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),

'blue': ((0.0, 1.0, 1.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0))
}
mycm = LinearSegmentedColormap('mycm', cdict1)

こんな感じで作ったmycmをcmap引数としてmatshowなどに渡せば良いんですが、微妙に書き方が分かりにくいです。まず、cdict1はRGBに分かれています。それぞれのタプルは3つの要素からできていて、最初の数字は0から1まで変化させて、色の始点と終点を決めています。だったら、各タプルの要素は2つでいいんじゃないか?と思いますが、確かに色が連続的に変化するときは、2つで十分なので、3つめの要素は2つ目と一緒にします。このコードだと、たとえばこんな画が出来ます。
cm_0.png
色を連続的に変化させたいときはこれで終わりですが、色の変化を不連続にしたいときに、3つ目の要素が効いてきます。3つ目の要素は新たな始点を定義します。

from matplotlib.colors import LinearSegmentedColormap
cdict1 = {'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 0.0),
(1.0, 1.0, 1.0)),

'green': ((0.0, 1.0, 1.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),

'blue': ((0.0, 1.0, 1.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0))
}
mycm = LinearSegmentedColormap('mycm', cdict1)

たとえば、コードをこのように変更すると、画はこう変わります。
cm_2.png
redの0.5に相当する2つ目タプルの3つ目の要素が0.0になっています。赤の要素がcolorbar半分のところで、一度1.0まで上り詰めてRGBすべて1.0の白になったあと、不連続にRだけ0.0になるので、再び水色(Rが0でGとBが100%)に色が戻って、その後、赤の要素が増えて行くことになります。
ちょっと分かりにくいですが、理解出来ると、なんでも出来るので、やっぱりよく出来てるなーと思うところです。

ちなみに、matplotlibに関してすごいよくまとまっているサイトを見つけたので、貼っておきます。
スポンサーサイト



【2014/07/31 18:47】 | Python | トラックバック(0) | コメント(0) | page top↑
<<Pandas.read_csvのちょっとした話 | ホーム | matshowを使う>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバックURL
→http://tanopy.blog79.fc2.com/tb.php/110-8a4653e7
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |