Pythonで複数のサブプロットに1つの凡例を作成する方法
Pythonを使用してデータを視覚化する際、matplotlibライブラリは非常に強力なツールです。特に、複数のサブプロットを作成し、それらに共通の凡例を追加することは、データの比較を容易にし、読みやすさを向上させます。このガイドでは、Python 3で複数のサブプロットに1つの共通の凡例を作成する方法について詳しく説明し、サンプルコードを提供します。
matplotlibを使用してサブプロットを作成する
まず、matplotlibライブラリをインポートし、サブプロットを作成する基本的な方法を説明します。以下の例では、2つのサブプロットを作成し、それぞれに異なるデータセットをプロットします。
import matplotlib.pyplot as plt import numpy as np # データを生成 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) # サブプロットを作成 fig, axs = plt.subplots(1, 2, figsize=(10, 5)) # 各サブプロットにプロット axs[0].plot(x, y1, label='Sine') axs[1].plot(x, y2, label='Cosine') # 各サブプロットに凡例を追加 axs[0].legend() axs[1].legend() plt.show()
このコードでは、2つのサブプロットを作成し、それぞれに個別の凡例を追加しています。しかし、共通の凡例を作成する場合は異なるアプローチが必要です。
共通の凡例を作成する方法
共通の凡例を作成するためには、各プロットのlabelを収集し、それを1つの凡例としてまとめる必要があります。以下の例では、`fig.legend()`を使用して、共通の凡例を追加する方法を示しています。
# データを生成 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) # サブプロットを作成 fig, axs = plt.subplots(1, 2, figsize=(10, 5)) # 各サブプロットにプロット axs[0].plot(x, y1, label='Sine') axs[1].plot(x, y2, label='Cosine') # 各プロットのhandleとlabelを収集 handles, labels = [], [] for ax in axs: for handle, label in zip(*ax.get_legend_handles_labels()): handles.append(handle) labels.append(label) # 共通の凡例を作成 fig.legend(handles, labels, loc='upper center') plt.show()
この方法では、各サブプロットからhandleとlabelを取得し、`fig.legend()`を使用して共通の凡例を追加しています。これにより、全体のレイアウトが統一され、凡例が重複しません。
さらに高度なレイアウトへの応用
より複雑なレイアウトを持つ複数のサブプロットに共通の凡例を追加することも可能です。以下の例では、3×1のレイアウトを使用し、中央に凡例を配置しています。
# データを生成 x = np.linspace(0, 10, 100) y1 = np.sin(x) y2 = np.cos(x) y3 = np.tan(x) # サブプロットを作成 fig, axs = plt.subplots(3, 1, figsize=(6, 12)) # 各サブプロットにプロット axs[0].plot(x, y1, label='Sine') axs[1].plot(x, y2, label='Cosine') axs[2].plot(x, y3, label='Tangent') # 各プロットのhandleとlabelを収集 handles, labels = [], [] for ax in axs: for handle, label in zip(*ax.get_legend_handles_labels()): handles.append(handle) labels.append(label) # 共通の凡例を作成 fig.legend(handles, labels, loc='center') plt.tight_layout() plt.show()
このコードでは、3つのサブプロットを縦に並べ、中央に共通の凡例を配置しています。`plt.tight_layout()`を使用することで、プロット間のスペースを自動的に調整し、見やすさを向上させています。
まとめ
Pythonのmatplotlibを使用して複数のサブプロットに共通の凡例を作成する方法を学びました。`fig.legend()`を活用することで、プロット全体に統一感を持たせつつ、視覚的にわかりやすいグラフを作成できます。これにより、データの比較が容易になり、プレゼンテーションや報告書においても有効に活用できます。
Python 3では、Matplotlibライブラリを使用して複数のサブプロットに1つの凡例を作成することができます。凡例は、グラフ内の要素を識別するための重要な要素です。
まず、Matplotlibをインポートし、サブプロットを作成します。次に、各サブプロットで凡例を作成し、それらを1つの凡例に結合します。これを行うために、各サブプロットで凡例を作成する際に、ラベルを指定し、凡例を作成します。その後、凡例を1つの凡例に結合するために、plt.legend()関数を使用します。
以下は、Python 3で複数のサブプロットに1つの凡例を作成するための基本的なコード例です:
“`python
import matplotlib.pyplot as plt# サブプロットを作成
fig, axs = plt.subplots(2)# サブプロット1の凡例を作成
axs[0].plot([1, 2, 3], label=’データ1′)
axs[0].plot([3, 2, 1], label=’データ2′)# サブプロット2の凡例を作成
axs[1].plot([1, 2, 3], label=’データ3′)
axs[1].plot([3, 2, 1], label=’データ4′)# 1つの凡例に結合
plt.legend()plt.show()
“`このコードを使用すると、2つのサブプロットにそれぞれ2つのデータがあり、それらを1つの凡例で識別できるようになります。