(最終更新月: 2024年11月)
✔こんな方におすすめの記事です
「Matplotlibで複数のグラフを並べて表示したい」
「データを比較しやすいように、グラフを横に並べる方法を知りたい」
「Matplotlibのサブプロットの使い方がわからない」
✔当記事を通じて得られること
- Matplotlibで複数グラフを並べる基本的な方法
- サブプロットを使った効果的なグラフのレイアウト方法
- 実践的なグラフ作成のテクニックとカスタマイズ方法
当記事では、Matplotlibの基本的な使い方から複雑なグラフレイアウトまで、実例を交えて詳しく解説していきます。
ぜひ最後までご覧ください。
Matplotlibで複数グラフを並べる基本
Matplotlibで複数のグラフを並べて表示する方法について説明していきます。
データ分析や可視化において、複数のグラフを比較することは非常に重要な作業です。
- サブプロットとは
- 基本的なグラフの配置方法
- グラフサイズの調整方法
- グラフ間のスペース調整
サブプロットとは
サブプロットは、1つの図(Figure)の中に複数のグラフを配置するための機能です。
Matplotlibでは、plt.subplot()やfigure.add_subplot()を使って実現できます。
以下が基本的な使用例になります。
import matplotlib.pyplot as plt
import numpy as np
# データの準備
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
# 2つのグラフを横に並べる
plt.figure(figsize=(10, 4))
plt.subplot(1, 2, 1) # 1行2列の1番目
plt.plot(x, y1)
plt.title('Sin Wave')
plt.subplot(1, 2, 2) # 1行2列の2番目
plt.plot(x, y2)
plt.title('Cos Wave')
plt.tight_layout()
plt.show()
基本的なグラフの配置方法
グラフの配置は、subplot()の引数で指定できます。
行数、列数、配置位置の3つの数値で制御するのが基本です。
以下のように、様々な配置パターンを実現できます。
# 2行2列の例
plt.figure(figsize=(10, 8))
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('グラフ1')
plt.subplot(2, 2, 2)
plt.plot([1, 2, 3], [3, 2, 1])
plt.title('グラフ2')
plt.subplot(2, 2, 3)
plt.plot([1, 2, 3], [2, 3, 1])
plt.title('グラフ3')
plt.subplot(2, 2, 4)
plt.plot([1, 2, 3], [1, 3, 2])
plt.title('グラフ4')
plt.tight_layout()
plt.show()
グラフサイズの調整方法
全体のグラフサイズは、figure()関数のfigsizeパラメータで調整できます。
単位はインチで指定し、横幅と縦幅を設定します。
以下は、グラフサイズを変更する例です。
# 大きめのグラフサイズで作成
plt.figure(figsize=(15, 6))
plt.subplot(1, 3, 1)
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('大きいグラフ1')
plt.subplot(1, 3, 2)
plt.plot([1, 2, 3], [3, 2, 1])
plt.title('大きいグラフ2')
plt.subplot(1, 3, 3)
plt.plot([1, 2, 3], [2, 1, 3])
plt.title('大きいグラフ3')
plt.tight_layout()
plt.show()
効果的なグラフレイアウトの作成方法
複数のグラフを効果的に配置するためのテクニックを解説します。
見やすく、情報が伝わりやすいレイアウトを作成することが重要です。
- グリッドレイアウトの活用
- 非対称なレイアウトの作成
- レイアウトのカスタマイズ方法
グリッドレイアウトの活用
GridSpecを使用すると、より柔軟なグリッドレイアウトが可能になります。
行や列のサイズを個別に調整できるのが特徴です。
以下のコードで、グリッドレイアウトを実現できます。
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(2, 3)
ax1 = fig.add_subplot(gs[0, :2])
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('広いグラフ')
ax2 = fig.add_subplot(gs[0, 2])
plt.plot([1, 2, 3], [3, 2, 1])
plt.title('細いグラフ')
ax3 = fig.add_subplot(gs[1, :])
plt.plot([1, 2, 3], [2, 3, 1])
plt.title('下段全体のグラフ')
plt.tight_layout()
plt.show()
非対称なレイアウトの作成
GridSpecを使うと、非対称なレイアウトも簡単に作成できます。
データの重要度に応じてグラフの大きさを変えることができます。
以下は、非対称レイアウトの例です。
fig = plt.figure(figsize=(12, 8))
gs = gridspec.GridSpec(2, 2)
ax1 = fig.add_subplot(gs[0, 0])
plt.plot([1, 2, 3], [1, 2, 3])
plt.title('左上グラフ')
ax2 = fig.add_subplot(gs[0, 1])
plt.plot([1, 2, 3], [3, 2, 1])
plt.title('右上グラフ')
ax3 = fig.add_subplot(gs[1, :])
plt.plot([1, 2, 3], [2, 3, 1])
plt.title('下段大きいグラフ')
plt.tight_layout()
plt.show()
レイアウトのカスタマイズ方法
グラフ間のスペースや余白を調整して、見やすいレイアウトを作成できます。
tight_layout()やsubplots_adjust()を使って細かい調整が可能です。
以下のコードで、レイアウトをカスタマイズできます。
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
plt.subplots_adjust(wspace=0.3, hspace=0.3)
axes[0, 0].plot([1, 2, 3], [1, 2, 3])
axes[0, 0].set_title('グラフ1')
axes[0, 1].plot([1, 2, 3], [3, 2, 1])
axes[0, 1].set_title('グラフ2')
axes[1, 0].plot([1, 2, 3], [2, 3, 1])
axes[1, 0].set_title('グラフ3')
axes[1, 1].plot([1, 2, 3], [1, 3, 2])
axes[1, 1].set_title('グラフ4')
plt.show()
グラフの見た目の調整
複数のグラフを並べる際の見た目の調整方法について説明します。
見やすく、情報が正確に伝わるグラフを作成することが目標です。
- タイトルとラベルの設定
- 軸の範囲とグリッドの調整
- 色とスタイルの設定
タイトルとラベルの設定
各グラフにタイトルや軸ラベルを適切に設定することで、情報がより伝わりやすくなります。
suptitle()を使用して全体のタイトルも設定できます。
以下は、タイトルとラベルを設定する例です。
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot([1, 2, 3], [1, 2, 3])
ax1.set_title('データ1の推移')
ax1.set_xlabel('時間')
ax1.set_ylabel('値')
ax2.plot([1, 2, 3], [3, 2, 1])
ax2.set_title('データ2の推移')
ax2.set_xlabel('時間')
ax2.set_ylabel('値')
plt.suptitle('データ分析結果', fontsize=16)
plt.tight_layout()
plt.show()
軸の範囲とグリッドの調整
グラフの軸範囲やグリッドを適切に設定することで、データの比較が容易になります。
set_xlim()やset_ylim()で軸の範囲を設定できます。
以下のコードで、軸範囲とグリッドを調整できます。
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot([1, 2, 3], [1, 2, 3])
ax1.set_xlim(0, 4)
ax1.set_ylim(0, 4)
ax1.grid(True)
ax1.set_title('グリッドあり')
ax2.plot([1, 2, 3], [3, 2, 1])
ax2.set_xlim(0, 4)
ax2.set_ylim(0, 4)
ax2.set_title('グリッドなし')
plt.tight_layout()
plt.show()
色とスタイルの設定
グラフの線の色やスタイルを変更することで、データの区別がつきやすくなります。
様々な色やマーカー、線のスタイルを組み合わせることができます。
以下は、色とスタイルを設定する例です。
x = np.linspace(0, 10, 100)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.plot(x, np.sin(x), 'r-', label='sin')
ax1.plot(x, np.cos(x), 'b--', label='cos')
ax1.legend()
ax1.set_title('異なる線のスタイル')
ax2.scatter(x[::10], np.sin(x[::10]), c='red', marker='o', label='sin')
ax2.scatter(x[::10], np.cos(x[::10]), c='blue', marker='^', label='cos')
ax2.legend()
ax2.set_title('異なるマーカースタイル')
plt.tight_layout()
plt.show()
実践的なグラフ作成例
実際のデータ分析で使える実践的なグラフ作成例を紹介します。
複数のデータを効果的に表現する方法を学びましょう。
- 時系列データの可視化
- 散布図と折れ線グラフの組み合わせ
- ヒートマップの作成方法
時系列データの可視化
時系列データを複数のグラフで表示する方法について説明します。
日付データの扱い方や、効果的な表示方法を紹介します。
以下は、時系列データを可視化する例です。
import pandas as pd
# サンプルデータの作成
dates = pd.date_range('2023-01-01', periods=100)
data1 = np.random.randn(100).cumsum()
data2 = np.random.randn(100).cumsum()
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
ax1.plot(dates, data1, 'b-', label='データ1')
ax1.set_title('時系列データ1')
ax1.legend()
ax1.grid(True)
ax2.plot(dates, data2, 'r-', label='データ2')
ax2.set_title('時系列データ2')
ax2.legend()
ax2.grid(True)
plt.tight_layout()
plt.show()
散布図と折れ線グラフの組み合わせ
散布図と折れ線グラフを組み合わせることで、データの傾向と個々の値を同時に表示できます。
相関関係や外れ値の確認に適しています。
以下のコードで、散布図と折れ線グラフを組み合わせることができます。
x = np.linspace(0, 10, 50)
y = 2 * x + np.random.normal(0, 1, 50)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
ax1.scatter(x, y, c='blue', alpha=0.5)
ax1.plot(x, 2*x, 'r-', label='理論値')
ax1.set_title('散布図と理論線')
ax1.legend()
ax2.hist(y - 2*x, bins=20)
ax2.set_title('残差のヒストグラム')
plt.tight_layout()
plt.show()
ヒートマップの作成方法
ヒートマップを使って、データの相関関係や分布を視覚化できます。
複数の変数間の関係を一目で把握することができます。
以下は、ヒートマップを作成する例です。
import seaborn as sns
# サンプルデータの作成
data = np.random.rand(5, 5)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
sns.heatmap(data, annot=True, cmap='YlOrRd', ax=ax1)
ax1.set_title('数値付きヒートマップ')
sns.heatmap(data, cmap='coolwarm', ax=ax2)
ax2.set_title('カラーグラデーションヒートマップ')
plt.tight_layout()
plt.show()
まとめ
当記事では、Matplotlibを使った複数グラフの配置方法について学習してきました。
- サブプロットの基本的な使い方と効果的なレイアウト方法
- グラフの見た目を調整するための様々なテクニック
- 実践的なデータ可視化の手法とカスタマイズ方法
これらの知識を活かして、自分のデータ分析に合わせたグラフを作成してみましょう。
一度に複数のグラフを表示することで、データの比較や分析がより効果的になります。
ぜひ、実際のデータを使って様々なグラフレイアウトを試してみてください。