日々の雑記帳

日々感じたこと、学んだことの備忘録

Pythonによる計算物理(2)

Matplotlib基本事項メモ

ここでは、数値計算結果をグラフなどの可視化の際に便利なMatplotlibライブラリの基本的事項を記しておく。

Matplotlib

Matplotlibはグラフ描画用のライブラリである。数値計算の結果を簡易的に確認するだけではなく、論文やプレゼンにも使える見栄えのよいグラフ作成までできる。
Matplotlibを使用するには、次のようにpyplotをインポートする。

import matplotlib.pyplot as plt

2つのインターフェース

Matplotlibには以下2つのインターフェース(呼び出し方)が存在する。
- オブジェクト指向インターフェース(object-orinted interface) - pyplotインターフェース(state-based interface) 以下に2つのインターフェースでのMatplotlibよりグラフを描画するコード例を示す。






import numpy as np
x = np.linspace(-2, 2, 101)    # -2から2までを100等分した配列を生成
y = np.tanh(x)                 # 各x点におけるtanh(x)を計算

オブジェクト指向インターフェースを使ってグラフを描くコードは以下となる。

fig, ax = plt.subplots()       # まずFigureオブジェクトとAxesオブジェクトを生成
ax.plot(x, y)                  # axesオブジェクトにプロット
ax.set_xlabel('x labael')      # x軸にラベルをつける
ax.set_ylabel('y labael')      # y軸にラベルをつける
fig.show()                     # グラフを表示
/var/folders/yt/sj88vtyd5d1d_gdrrqdq469h0000gn/T/ipykernel_29949/1623430655.py:5: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.
  fig.show()                     # グラフを表示



[f:id:AKH1116:20240131011919p:plain]

次に、同じ図をpyplotインターフェースで描くコードを以下に示す。

plt.plot(x, y)
plt.xlabel('x labael')
plt.ylabel('y labael')
plt.show()

上記のオブジェクト指向インターフェースとpyplotインターフェースを比べると、pyplotインターフェースの方がシンプルに書けるが、オブジェクト指向インターフェースの方がより手の込んだグラフを作成できるので、こちらで書くことを推奨する。   たとえば、オブジェクト指向インターフェースを利用すると、1つの図の中に複数のグラフを描くことができる。

1つの図に複数のグラフを描く方法

1つのFigureの中に複数のAxesオブジェクトを作り、各Axesオブジェクトに対してグラフを描けば良い。
複数のAxesオブジェクトを生成するには、plt.subplots()の引数に、縦と横に並べるグラフの数を与える。

x = np.linspace(0, 1, 51) * np.pi * 2
y1 = np.sin(x)
y2 = np.cos(x)
y3 = x
y4 = x*x
fig, ax = plt.subplots(2, 2)
ax[0,0].plot(x, y1)
ax[0,1].plot(x, y2)
ax[1,0].plot(x, y3)
ax[1,1].plot(x, y4)
plt.show()