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↑
matshowを使う
matplotlibは便利なんですが、何でもできる反面、1つの事にたいして、やり方が複数あるような気がして、その点はについては、Python的では無いという感じがします。(Pythonはひとつのことに対する実現方法をひとつにすることで、全体の分かり易さを実現しています。)
というわけで、pandas.DataFrameに格納されたデータをヒートマップにするコードを貼っておきます。本体とcolorbarを描く領域の位置と大きさをfig.add_axesで微妙に調整しています。今はダミーですが、実際は行の名前の長さなどで調整すると良いかと思います。


fig = pylab.figure(figsize=(16,9))
ax1 = fig.add_axes([0.07,0.2,0.85,.6])
im = ax1.matshow(buff,vmin=-2.0,vmax=2.0,aspect='auto')
ax1.set_yticks(range(len(buff)))
ax1.set_yticklabels(['name_0','name_1','name_2'],size='large')
axcolor = fig.add_axes([0.94,0.4,0.02,0.2])
pylab.colorbar(im, cax=axcolor)
fig.show()

出力例です。
figure_44.png

【2014/07/22 15:53】 | Python | トラックバック(0) | コメント(0) | page top↑
GAEで独自ドメイン
Google App Engine(GAE)は、あんまりアクセス数がなければ無料で使えて、PythonでWebアプリが作れるので便利です。独自ドメインで運用しようとする場合、面倒な設定が必要なのかと思っていたのですが、簡単でした。Google Appsに登録しないと駄目というような記事も見かけるのですが、変わったのかな。お名前.comでとったドメインをこの説明に従って設定するだけで、すぐ使えるようになりました。
世の中、便利になりすぎて、どんどん怠惰になってる気がする・・・。
【2014/07/20 01:51】 | Webサービス | トラックバック(0) | コメント(0) | page top↑
Marvericksへアップグレード
MacOSの新しいOSが出ても基本的には半年くらい待つことにしています。3連休と言うことで、Python本の次回作を書こうと思いつつ、試験前の学生みたいに違うことを始めてしまいました。10.9.4にして概ね良好な動きですが、いくつか嵌まった点を。
XQuartzが起動しているのに、「xauth起動のためにはX11が必要」としつこく言ってくる点は、XQuartzの再インストールで解決。
VirtualBoxを起動後、ゲストOSがすべて謎のエラーで起動出来ないときは焦りましたが、これもVirtualBoxの再インストールで回避。
相変わらずZenitaniさんのEmacsを使っていますが、C-x C-fでデフォルトのディレクトリがルートディレクトリになるという地味な不具合が。最初なんだか分からなかった。ちょっと探したら解決策が。
こんなところで、勘弁してもらえるといいけど・・・。4年前のiMacですが、全体的にはいまのところ不満はありません。

2014.7.20 追記
いろいろと不具合はあるもので、CyberduckがJava6のランタイムを必要とするらしく、そのままでは起動しません。この情報に助けられました。あやうく、7をインストールするところだった。
Java for OS Xなるものが必要らしく、これをインストールしたら起動しました。しかし、MacはJavaがデフォルトで入ってないって、すごい決断したもんだと思うところです。
【2014/07/19 19:24】 | PC設定 | トラックバック(0) | コメント(0) | page top↑
matplotlibで2次元ヒストグラム
ものすごい沢山のデータポイントを単純に2次元にプロットすると、あんまり意味がない散布図が出来上がってしまうので、そんなときには2次元ヒストグラムが便利です。ipython --pylabなどとして起動して、

from matplotlib.colors import LogNorm
clf()
figsize=(10,10)
subplot(1,1,1,aspect=1)
hist2d(x,y,(200,200),norm=LogNorm())
colorbar(shrink=0.78)

aspect=1とすることで、散布図の縦横比がcolorbarを加えたあとも崩れません。もとのデータの性質にもよりますが、頻度をlogで表示したほうが画がそれっぽく見えますが、このあたりは印象操作もできそうでちょっと危険です。colorbarは、shrinkの引数で少しサイズを小さくしています。出来上がりはこんな感じです。
figure_31.png

テーマ:プログラミング - ジャンル:コンピュータ

【2014/07/09 18:33】 | Python | トラックバック(0) | コメント(0) | page top↑
| ホーム |