matplotlibの基本

Matplotlibとは

Matplotlibは、プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。

Matplotlibを使うと、計算結果として得られたNumPyのデータをグラフにして可視化することができます。Pythonで大規模なデータ分析や機械学習を行う際には必ずお世話になるライブラリです。

Matplotlibでは、グラフを「折れ線グラフ」「ヒストグラム」「散布図」「3Dグラフ」などで描画できます。グラフは各種画像形式で保存できます。

Matplotlibはフリーかつオープンソースのライブラリです。

インストール

pipを使ってインストールします。

$ pip install matplotlib

Matplotlibの使い方

matplotlibパッケージをインポートします。また、matplotlibはnumpyとともに用いられることが多いので、ここでもnumpyのデータを描画していきます。

matplotlib.pyplot がグラフ描画の為のモジュールですので、これをインポートします。名前を「plt」と付けるのが一般的なのでこれに倣います。

あとはデータをプロットして表示します。実行するとグラフが表示されます。2次関数のグラフです。

import numpy as np
from matplotlib import pyplot as plt # グラフ描画の為のモジュール

# プロットするデータ(配列)
x = np.linspace(-10, 10, endpoint=True)
y = x**2

# 横軸x, 縦軸y をプロット
plt.plot(x, y) 
plt.show()

以下にさまざまなグラフの描画例を作成しました。グラフ個別の細かい設定等は別記事でまとめます。

折れ線グラフ(line graph)

折れ線グラフは plt.plot でプロットする x, y の値をそれぞれ設定します。

import numpy as np
from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6]
y = [100, 250, 200, 300, 310, 200]

plt.plot(x, y)
plt.show()

折れ線グラフですが、プロットされる間隔が狭まれば曲線のように描画できます。以下はsin関数です。プロットされているのは50個の点です。

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, 2*np.pi) # 0から2πまでの範囲
y = np.sin(x)

plt.plot(x, y)
plt.show()

棒グラフ

Matplotlibには matplotlib.pyplot.bar という棒グラフ描画用の関数が用意されています。これを使うと棒グラフが描画できます。

引数で縦軸横軸の値をそれぞれ設定します。

import numpy as np
from matplotlib import pyplot as plt

left = np.array([1, 2, 3, 4, 5]) # 横軸の値
height = np.array([100, 200, 300, 400, 500]) # 縦軸の値(棒の高さ)

plt.bar(left, height)
plt.show()

散布図

matplotlib.pyplot.scatter という散布図描画用の関数を使って散布図を描画することができます。

以下はランダムな(x, y)を生成し、散布図を描画しています。

import numpy as np
from matplotlib import pyplot as plt

 # 乱数を生成
x = np.random.rand(100)
y = np.random.rand(100)

# 散布図を描画
plt.scatter(x, y)
plt.show()

ヒストグラム

matplotlib.pyplot.hist というヒストグラム描画用の関数を使ってヒストグラムを描画することができます。

import numpy as np
from matplotlib import pyplot as plt

# 正規乱数を3000個生成 
x = np.random.normal(size=3000)

# ヒストグラム描画(ビンの数30)
plt.hist(x, bins=30)
plt.show()

3Dグラフ

mpl_toolkit.mplot3d から Axes3D をインポートしておくと、3Dグラフも描画できます。

numpy.meshgrid で2次元のメッシュを作成してそれをプロットします。

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D

x = np.arange(-25, 25)
y = np.arange(-25, 25)

X, Y = np.meshgrid(x,y)
Z = X**2 + Y**2

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X, Y, Z)
plt.show()

3次元散布図

3次元グラフだけでなく、3次元散布図も描画できます。

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D

 # 乱数を生成
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

# 3次元にプロット
fig = plt.figure()
ax = Axes3D(fig)
ax.plot(x, y, z, "o")

# 描画
plt.show()

画像の保存

生成される画像は [Save the figure] ボタンから保存できます。png, pdf, svg などの形式で保存できます。

まとめ

  • Matplotlib は、Pythonのデータ可視化用ライブラリ。
  • 様々なグラフで可視化でき、生成したグラフは画像形式で保存できる。
  • NumPyのデータなどを可視化するのに歳でkなライブラリ。

以上。

参考URL