matplotlib は Python でデータを可視化するための強力なライブラリです。2Dグラフの作成やカスタマイズが容易であり、データ分析やプレゼンテーション等に広く利用されています。
注意点としてグラフの作成のためのインターフェイスが大きく分けて2種類あるため、ウェブページ等を参考にする際に混乱する可能性があります。そのためここでは比較的簡単だと思われる Pyplot インターフェイスを使った方法を中心に説明します。
もう一方については末尾に記載しますので興味があれば見てください。
参考:Matplotlib Application Interfaces (APIs)
まずは、matplotlib をインポートします。
慣習的に plt といった省略した名前にします。
厳密には以下の通り pyplot といったモジュールを使用しています。
import matplotlib.pyplot as plt
最も基本的なグラフである折れ線グラフの作成方法を学びます。
# データの作成
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()
データポイントの分布を視覚化するために使用される散布図の作成方法を学びます。
# データの作成
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()
カテゴリごとのデータを視覚化するために使用される棒グラフの作成方法を学びます。
# データの作成
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()
データの分布を視覚化するために使用されるヒストグラムの作成方法を学びます。
# データの作成
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()
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()
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()
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()
作成したグラフを保存する方法と、表示オプションの調整について学びます。
# データの作成
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()