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)
x
とy
は長さの同じ配列でなければなりません。

散布図¶
線で繋がずに点のみ描く場合は、plt.scatter()
という関数を下記のように使います。
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
plt.scatter(x, y)
x
とy
は長さの同じ配列でなければなりません。
np.linspace(0, 2*np.pi, 10)
で0から$2\pi$までを10点に分割します。
そのため、グラフ上には、10点打たれます。

軸の範囲の指定¶
軸の範囲を指定するには、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)

軸のラベル¶
軸のラベルは、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)

注釈
ドルマークで囲むと正確には斜体ではなく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()

グラフの出力¶
'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')

日本語を使いたいとき¶
以下を評価してください。 Google Colabでうまくいくことは確認していますが、Anacondaでは未検証です。
!pip install japanize-matplotlib
import japanize_matplotlib