こんにちは、なおいです。
機械学習に欠かせないであろうデータの可視化が私にも必要になってきました。
一番有名なmatplotlibというライブラリをご多分にもれずやっていきたいと思います。
[:contents]
matplotlibとは?
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできるし、wxPython、Qt、GTKといった一般的なGUIツールキット製のアプリケーションにグラフの描画機能を組みこむこともできる。MATLABの対話環境のようなものを提供するpylabというインタフェースも持っている。Matplotlibは、BSDスタイルのライセンスの下で配布されている。(Wiki参照)
ということで、2次元及び3次元のグラフをさくっとプロットできる非常にありがたいライブラリです。
インストール方法(Mac)
pip install matplotlib
私はPython3.6.1を使用しており、上記のコマンドをターミナルで打てば問題なくインストールされました。(実際は、仮想環境を使ったりしているので仮想環境をActivateしたりはしていますが。。。)
import方法
import matplotlib.pyplot as plt
一番よくいろんなサイトに載っている方法はこれだと思います。私もこの方法でやりたいと思います。matplotlibパッケージの中のpyplotモジュールをpltという名前で使うという宣言です。これによって、このあとpltで色々できるようになるという感じです。
散布図(ポイント)のプロット
1.基本
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [9, 8, 7, 6, 5]
plt.scatter(x,y)
plt.show()
なんにも設定がいらなければ、これだけで散布図(ポイント)をプロットできます。
プロットした結果は以下の通りで、xとyは配列になっていて同じ数であれば、x[0]とy[0]の場所にプロットしてくれるため(1,9)となり、そのあとも同じインデックス同士の(2,8)、(3,7)、(4,6)、(5,5)とプロットされていくはずです。
問題なくプロットされてますね。あとは見た目をカスタマイズしていきます。
2.プロットの見た目をいじる
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [9, 8, 7, 6, 5]
plt.scatter(x,y, marker='*',c='red',label='test')
plt.legend() #凡例
plt.show()
赤文字部を追加することでプロットの見た目を変えて、凡例をつけられます。scatterに付けられる主要なカスタマイズキーワードは表形式でグラフの後に載せときます。
凡例つくだけでちょっとグラフっぽくなりますね。星になったのは少しいただけませんかね・・・ともかく、次は目盛線と補助目盛線をつけて、グラフタイトルとX軸Y軸のラベルを入れましょう。
Tips)プロットに付与できる主要なカスタマイズキーワード
主要と書いている通り、もっとたくさんキーワードはあります。より細かい指定で様々な散布図が描けますが、最低限これだけおさえてれいれば、普通のグラフは書けるかなという範囲のみ記載しておきます。
kywd | 入力例 | 備考 |
---|---|---|
x,y | [1,2,3,4,5] または 事前に定義したlistなど | array形式のもの ※必須 |
s | s=5 または x,yと同範囲のリスト(要素はサイズ) | マーカーの大きさ 指定しないと20 |
c | c="red" または c="#FFFF00" または c=(1.0,0,1.0) | マーカーの色 色名や16進数、RGBでの指定が可能 |
marker | marker="." | マーカーの形 指定しないと○ *は星形など様々指定可 |
alpha | alpha=0.3 | マーカーの透明度 指定は0-1の間で行う |
linewidths | linewidths=2 | マーカーの枠線の幅 |
label | label="label1" | 凡例名 |
色と形については、リファレンスを見ると以下のものが用意されているみたいです。
color example code: named_colors.py — Matplotlib 2.0.2 documentation
lines_bars_and_markers example code: marker_reference.py — Matplotlib 2.0.2 documentation
3.グラフの見た目をいじる
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [9, 8, 7, 6, 5]
plt.scatter(x,y, marker='s',c='red',label='test')
plt.legend()
plt.grid(True) #グリッド線
plt.xlabel("X-label") #X軸ラベル
plt.ylabel("Y-label") #Y軸ラベル
plt.title("TEST GRAPH") #グラフタイトル
plt.show()
先ほど同様、赤文字部を追加することで見た目のカスタマイズを行いました。実際のグラフが以下のものです。ちなみに、さすがに星はやめて四角にしました。
かなりらしくなってきましたね。これを資料に貼るだけでもテクってる感出ますかね?
では、最後に複数データを同じグラフに入れてみましょう。
4.複数データを一つのグラフにプロットする
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [9, 8, 7, 6, 5]
y2 = [5, 6, 7, 8, 9]
plt.scatter(x,y, marker='s',c='red',label='test')
plt.scatter(x,y2, marker='p',c='blue',label='test2')
plt.legend()
plt.grid(True)
plt.xlabel("X-label")
plt.ylabel("Y-label")
plt.title("TEST GRAPH")
plt.show()
同じグラフにプロットするだけなら、ただもう一行追加するだけでいいんですね。非常に簡単だし、ループを回す際もかなり楽に書けます。非常にありがたい。
いかがでしたか?これでとりあえず、散布図はいい感じにかけるようになりましたね。