anaconda, Pythonの導入とヒートマップの作成
anaconda, Pythonの導入とヒートマップの作成
忙しい時期がひと段落したので(まだ終わってないけど)、少しずつ最近身につけたスキルを公開して行きます。
目的は、C言語 - gnuplotでは描きにくいヒートマップを、Pythonで描きたいと思ったことです。
まず、anacondaという(Pythonに必要なツールがたくさん入った?、天文系だけ?)ツールをインストールします。
のページからPython 3の方をダウンロードしインストールします。
普通にインストールしてください(特に変わったことはしない)。
その後、ヒートマップを綺麗に書くためのモジュールである「seaborn」をインストールします。anaconda入ってるので、condaコマンドを使います。
conda install seaborn
これで、準備が整ったので、「jupyter notebook」を使ってプログラムを書いていきます。
jupyter notebookとは、ブラウザ上でPythonの編集、実行ができるツールで、簡単にプログラムと実行ができます。
まぁ、騙されたと思って
jupyter notebook
と打ち込んでください(描きたいデータの入ったディレクトリのターミナル上に)
するとブラウザが立ち上がります。
(私の個人的なファイルがいくつか入っていますが、気にせず)
その後、右上の「New」と書かれた下矢印を選択し、Python 3を選択します。
(黒丸のやつ)
すると、こんなのが新しいタブで立ち上がります。
この「In[ ]:」と書かれた部分にPythonのプログラムを書き込んでいくわけです。
実行は「Shift」を押しながら「enter(return)」です。
Inputデータは、
x y z
1 10 100
2 20 200
といった縦に並んだ形を想定しています。
そのため、ヒートマップを描くプログラムの前にピボットを作ります。
----
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.read_csv("map1.txt", dtype="float", sep="\s+")
pivot = pd.pivot_table(data=df, values='z', columns='x', index='y', aggfunc=np.mean)
print(pivot)
----
上から4行がimportしたものです(C言語でいう#include)。
で、5行目がmap1.txtを読み込んで、「df」に入れた。空白でseparateしているので、sep="\s+"です。
6行目がdfをピボットにしてpivotに入れる作業。その際、xを横軸に、yを縦軸に、zを値にするように設定しています
7行目でprintし中身を確認。
シフト押しながらエンターすると、ピボットが出来上がりました。
いよいよ、これを使ってヒートマップを描きます。
----
plt.figure(figsize=(12, 9))
sns.heatmap(pivot, vmin='-12', vmax='-8', cmap='Reds')
plt.savefig('./heatmap_sSFR_all.png')
----
1行目でサイズを決め、2行目でプロット(max=-8,min=-12,カラーは赤)、3行目で保存です。
結果、このようなヒートマップが描けました。
Pythonを導入し始めたところ(ほぼ描画専門として)で、わからないところも多いです。
コメントや、効率的になる方法があれば教えてください。
ちなみに、ヒートマップの軸を反転させる方法ってあるんですかね???