機械学習のための0からのPython入門~matplotlib:プロット,散布図,ヒストグラムなど~

matplotlibについて

matplotlibはPythonでグラフを描画するときによく使われるライブラリです.

外部ライブラリとなりますので,インストールが必要となります.Anacondaを使っている方はもともとインストールされているはずですので,インポートして確認してみてください.

インストールをまだされていない方は...

pipを使う場合:
pip install matplotlib
condaを使う場合:
conda install matplotlib

実はこのmatplotlib,極めようと思うと意外と奥が深くオブジェクト指向を使ってグラフの描画を進めていくことになるのですが,今回の記事はmatplotlibの入門ということで,難しいことは考えずとも簡単にグラフの描画ができる方法を紹介します.

インポートと簡単なプロット

まずはmatplotlibをインポートしていきましょう.よく一緒に使われるnumpyも同時にインポートします.以下のような名前でインポートするのが一般的です.

import matplotlib.pyplot as plt
import numpy as np

さぁ,早速,簡単なプロットをしてみちゃいましょう.plot(x座標のデータ, y座標のデータ)をしてあげればプロットができます.

# シンプルにプロット
x = np.linspace(-1, 1, 100)# -1 から 1 までの等差数列を100こ
plt.plot(x, x**2)
plt.show()

重要なことなのですが,matplotlibで扱うデータは基本的にnumpyの配列を想定しています.リストなどの他のデータ型を入れても問題なく動くことがありますが,それは中でnumpyの配列として変換がされているからです.それがうまくいかないとエラーが出てしまいます.

プロット:色や太さなどの変更

線の太さや色は,パラメータを渡すだけで簡単に調整できます.以下のコードをコピペして,色や,線の太さなどいろいろ自分でも変えてみて確かめてみると良いでしょう.

# プロットの色や太さなどを変えてみる
color = 'red'
linewidth = 2# 線の太さ
linestyle = ':' # [ '-' | '--' | '-.' | ':' | 'steps' | ...] のどれかを選ぶ
marker = '+' # 	[ '+' | ',' | '.' | '1' | '2' | '3' | '4' ] のどれかを選ぶ
alpha = 0.5# 線の濃さ

x = np.linspace(-np.pi, np.pi, 100)
plt.plot(x, np.sin(x), c = color, lw = linewidth, ls = linestyle, marker = marker, alpha = alpha)
plt.show()

散布図

散布図はscatter()関数を使えばできます.x座標とy座標さ指定してしまえば簡単な散布図のできあがりです.

# シンプルに散布図
x = np.random.random(10)
y = np.random.random(10)
plt.scatter(x, y)
plt.show()

散布図のデータを,データによって色分けしたいときがあります.

例えば,機械学習の分類問題で,クラス別にデータの分布を確認するときなどはこの機能があると便利ですね.

以下では二つの(多変量)正規分布からサンプルされたデータをクラス別に色分けをして表示しています.

# クラス別
n = 100
xy1 = np.random.normal(-1, 1, [n, 2])
xy2 = np.random.normal(1, 1, [n, 2])
xy = np.concatenate((xy1, xy2), axis = 0)
c = [0]*n + [1]*n
plt.scatter(xy[:, 0], xy[:, 1], c = c)
plt.show()

ヒストグラム

ヒストグラムはhist( )です.binsパラメータを調整することでビンの数を調整できます.

# ヒストグラム
x = np.random.normal(0, 1, 10000)
plt.hist(x, bins = 10)
plt.show()
# ヒストグラム
x = np.random.normal(0, 1, 10000)
plt.hist(x, bins = 100)
plt.show()

プロットに説明やタイトルを追加する

タイトルを付けたり軸に名前を付けたりするのは以下のようにしてできます.

x = np.linspace(-3.14, 3.14)
plt.plot(x, np.sin(x), c = 'blue')
plt.plot(x, np.cos(x), c = 'red')


plt.title('Plot Practice')# タイトルを付ける
plt.xlabel('x label')# x軸にラベルを付ける
plt.ylabel('y label')# y軸にラベルを付ける
plt.show()

また,上のように複数の曲線をプロットをするときに,それぞれの曲線にラベルを付けたい,ということがあります.そういときは,plot()を使うときに「label」を指定してあげて,legend()を使うと以下のようにラベルを表示することができます.

# legend
x = np.linspace(-3.14, 3.14)
plt.plot(x, np.sin(x), c = 'blue', label = 'sin')
plt.plot(x, np.cos(x), c = 'red', label = 'cos')


plt.title('Plot Practice')
plt.xlabel('x label')
plt.ylabel('y label')
plt.legend(loc='upper left')
plt.show()

「loc」はlocationの略で,ラベルを表示する位置を指定することができます.

作成したグラフを画像として保存する

作成したグラフを画像として保存するのは簡単でsavefig(ファイルのpath)としてあげればよいです.

x = np.linspace(-3.14, 3.14)
plt.plot(x, np.sin(x), c = 'blue', label = 'sin')
plt.savefig('plt_test.png')

以上のようにすれば,作業ディレクトリ内に「plt_test.png」という画像ファイルが作成されます.

次回

次回は「pandas:データを扱う上で最低限知っておきたいことまとめ」について学習します.

次の記事はこちら.

機械学習のためにしっかりとPythonを勉強したいなら,ある程度の基礎を身に着けた後に下の本を読むのがお勧めです.この本をこなせば,より高いレベルへ到達できるでしょう.

最新情報をチェックしよう!