Matplotlib

Matplotlibとは

MatplotlibはPythonでデータのグラフ化をするパッケージです。 グラフのファイル出力も簡単にできます。 2次元プロットの範囲内では、有料グラフソフトと遜色ないグラフ出力が可能です。

以下では、特に断りがない限り、NumpyおよびMatplotlibは以下のようにインポートしていることが前提です。

import numpy as np
import matplotlib.pyplot as plt

グラフの作成

線で繋いだプロット

線でつなくプロットは、plt.plot()という関数を下記のように使います。

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
plt.plot(x, y)

xyは長さの同じ配列でなければなりません。

../../_images/mpl1.png

散布図

線で繋がずに点のみ描く場合は、plt.scatter()という関数を下記のように使います。

x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
plt.scatter(x, y)

xyは長さの同じ配列でなければなりません。 np.linspace(0, 2*np.pi, 10)で0から$2\pi$までを10点に分割します。 そのため、グラフ上には、10点打たれます。

../../_images/mpl2.png

軸の範囲の指定

軸の範囲を指定するには、plt.xlim()及びplt.ylim()を用います。 以下の例は、x軸を0からπの範囲で、y軸は、0から1までの範囲でプロットするものです。

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
plt.xlim(0, np.pi)
plt.ylim(0, 1)
plt.plot(x, y)
../../_images/mpl3.png

軸のラベル

軸のラベルは、plt.xlabel()およびplt.ylabel()を用います。

日本語が使えない場合がありますので、アルファベット(英単語)のみ使用した方が無難です。 日本語を使いたいときも参考にしてください。

以下の例では、x軸のラベルを$x$ [rad]、y軸のラベルをSin curveとしています。 ドルマークで囲むと斜体になります。

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
plt.xlim(0, np.pi)
plt.ylim(0, 1)
plt.xlabel('$x$ [rad]')
plt.ylabel('Sin curve')
plt.plot(x, y)
../../_images/mpl4.png

注釈

ドルマークで囲むと正確には斜体ではなくTeX表記になります。TeX表記を用いると数式をきれいに表現することができます。ギリシャ文字は \alpha\omega などと書けます。詳細が気になる人は、Webで検索してください。 もし表示がうまくいかない場合は、 r'$\alpha$' というようにクォート記号の前に r を追加してみてください。

凡例の指定

plt.plot(x, y)を複数回呼び出せばグラフが重ねてプロットされます。 複数のグラフがあるときは、それぞれが何を表すかのラベルである凡例を示す必要があります。 凡例は、plt.plot()のオプションとして、label=に続ける形で書きます。 最後にplt.legend()とします。 下の例は、$\sin x$と$\cos x$をプロットし、それぞれにsin $x$cos $x$ というラベルをつけています。

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
z = np.cos(x)

plt.xlim(0, np.pi)
plt.ylim(-1, 1)
plt.xlabel('$x$ [rad]')
plt.plot(x, y, label='sin $x$')
plt.plot(x, z, label='cos $x$')
plt.legend()
../../_images/mpl5.png

グラフの出力

'plt.savefig()'関数を使うとプロットしたものを適当なファイル形式で出力でいます。 以下では、pdfで出力していますが、拡張子を.pngとすればPNG形式で保存もできます。 オプションのtransparent=Trueは背面を透過し、bbox_inches ='tight'は余白を小さくしますので、つけておいた方が良いです。 Google Colabを使っている場合は、左側のファイルリスト(左端のフォルダボタンを押して現れるもの)にplot.pdfが出てくることを確認してください。 それを右クリックすればダウンロードできます。

x = np.linspace(0, 2*np.pi)
y = np.sin(x)
z = np.cos(x)

plt.xlim(0, np.pi)
plt.ylim(-1, 1)
plt.xlabel('$x$ [rad]')
plt.plot(x, y, label='sin $x$')
plt.plot(x, z, label='cos $x$')
plt.legend()

plt.savefig('plot.pdf', transparent=True, bbox_inches ='tight')
../../_images/mpl6.png

日本語を使いたいとき

以下を評価してください。 Google Colabでうまくいくことは確認していますが、Anacondaでは未検証です。

!pip install japanize-matplotlib
import japanize_matplotlib