オープンハウス ドキュメント(2024)

matplotlib の基礎チュートリアル

1. はじめに

matplotlib は Python でデータを可視化するための強力なライブラリです。2Dグラフの作成やカスタマイズが容易であり、データ分析やプレゼンテーション等に広く利用されています。

公式ページ

注意点としてグラフの作成のためのインターフェイスが大きく分けて2種類あるため、ウェブページ等を参考にする際に混乱する可能性があります。そのためここでは比較的簡単だと思われる Pyplot インターフェイスを使った方法を中心に説明します。
もう一方については末尾に記載しますので興味があれば見てください。

参考:Matplotlib Application Interfaces (APIs)

2. matplotlib のインポート

まずは、matplotlib をインポートします。
慣習的に plt といった省略した名前にします。
厳密には以下の通り pyplot といったモジュールを使用しています。

import matplotlib.pyplot as plt

3. 基本的なプロット

3.1 折れ線グラフ

最も基本的なグラフである折れ線グラフの作成方法を学びます。

# データの作成
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 折れ線グラフの作成
plt.plot(x, y)
plt.title("Basic Line Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.show()

3.2 散布図

データポイントの分布を視覚化するために使用される散布図の作成方法を学びます。

# データの作成
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 散布図の作成
plt.scatter(x, y)
plt.title("Basic Scatter Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.show()

3.3 棒グラフ

カテゴリごとのデータを視覚化するために使用される棒グラフの作成方法を学びます。

# データの作成
categories = ['A', 'B', 'C', 'D']
values = [10, 15, 7, 10]

# 棒グラフの作成
plt.bar(categories, values)
plt.title("Basic Bar Chart")
plt.xlabel("Categories")
plt.ylabel("Values")
plt.show()

3.4 ヒストグラム

データの分布を視覚化するために使用されるヒストグラムの作成方法を学びます。

# データの作成
import numpy as np
data = np.random.randn(1000)

# ヒストグラムの作成
plt.hist(data, bins=30, alpha=0.7)
plt.title("Basic Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.show()

4. グラフのカスタマイズ

4.1 グラフのスタイルと色

matplotlib では、グラフのスタイルや色を簡単にカスタマイズできます。

# データの作成
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# カスタマイズされた折れ線グラフの作成
plt.plot(x, y, color='red', linestyle='--', marker='o')
plt.title("Customized Line Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.grid(True)
plt.show()

4.2 複数のグラフを描画する

1つの図に複数のグラフを描画する方法を学びます。

# データの作成
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 複数のグラフを同時に描画
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')
plt.title("Multiple Line Plots")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.legend()
plt.show()

4.3 サブプロット

1つのウィンドウに複数のグラフを配置するサブプロットの作成方法を学びます。

# データの作成
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# サブプロットを作成
plt.subplot(2, 1, 1)  # (行, 列, 番号)
plt.plot(x, y1)
plt.title("Sin(x)")

plt.subplot(2, 1, 2)
plt.plot(x, y2)
plt.title("Cos(x)")

plt.tight_layout()
plt.show()

5. 保存と表示のオプション

作成したグラフを保存する方法と、表示オプションの調整について学びます。

# データの作成
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# グラフの作成
plt.plot(x, y)
plt.title("Sin(x) Plot")

# グラフをデフォルトの形式で保存(通常は PNG です)
plt.savefig("sin_plot1")

# グラフをPNG形式で保存
plt.savefig("sin_plot2.png")

# グラフをPDF形式で保存
plt.savefig("sin_plot3.pdf")

# グラフの表示
plt.show()

オブジェクト指向インターフェイスについて

これまで Pyplot インターフェイスによってグラフを作成していましたが、matplotlib にはもう一つオブジェクト指向インターフェイスといったものがあります。Pyplot インターフェイスでは暗黙的に最後に作成されたグラフについてタイトルを付けたり、ラベルを付けたりしていましたがこちらではFigureオブジェクトもしくはAxesオブジェクトのメソッドを使用してグラフを作成します。

例えば散布図を作成する場合は以下の様になります。

import matplotlib.pyplot as plt

# データの作成
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

# 散布図の作成
fig, ax = plt.subplots() # Figure オブジェクトと Axes オブジェクトが返る
ax.scatter(x, y)
ax.set_title("Basic Scatter Plot")
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")

plt.show()

プログラムを見ますと Pyplot インターフェイスでは plt.scatter だった場所が ax.scatter となっています。また、グラフのタイトルを設定するのに plt.title ではなく ax.set_title を使っています。

上記の様に明示的にグラフを描画する対象を設定できるためより複雑なグラフを作成する事が可能です。
例えば、複数のグラフを作成するとき Pyplot インターフェイスではどの場所のグラフを作成するかを先に設定して作成や設定を行う必要がありましたがオブジェクト指向インターフェイスでは Axes オブジェクトを利用する事で以下の様に自由なタイミングで設定する事が可能です。

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# サブプロットを作成
fig, (ax1, ax2) = plt.subplots(2, 1)  # (行, 列)

ax2.set_title("Cos(x)")
ax1.plot(x, y1)
ax1.set_title("Sin(x)")
ax2.plot(x, y2)

plt.tight_layout()
plt.show()