Matplotlibは視覚化を作成するための強力なツールを提供しており、サブプロットのサイズをカスタマイズすることは効果的なコミュニケーションの鍵となります。この記事では、Matplotlibでサイズが異なるサブプロットを作成するための3つの方法について説明し、それぞれについて明確な例と説明を示します。
目次
柔軟なサブプロットレイアウトのためのgridspec
の使用
matplotlib.gridspec
モジュールは、サイズが異なるサブプロットを作成するための最も柔軟なアプローチを提供します。グリッドを定義し、height_ratios
とwidth_ratios
を使用して相対的なサイズを制御しながら、そのグリッドの特定の領域にサブプロットを割り当てることができます。
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(10, 6))
gs = gridspec.GridSpec(nrows=2, ncols=2, height_ratios=[2, 1], width_ratios=[1, 2])
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[1, :]) # 2列にまたがる
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [6, 4, 5])
ax3.plot([1, 2, 3, 4, 5], [2, 4, 1, 3, 5])
plt.tight_layout()
plt.show()
このコードは、上段が下段の2倍の高さ、右列が左列の2倍の幅を持つ2×2グリッドを作成します。各サブプロットは、その後、指定された領域に追加されます。
簡潔な制御のためのgridspec_kw
の活用
より単純なレイアウトの場合、plt.subplots()
内のgridspec_kw
引数は、より簡潔な代替手段を提供します。明示的なgridspec
オブジェクトの作成を必要とせずに、gridspec機能を直接統合します。
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 2, figsize=(10, 6), gridspec_kw={'height_ratios': [2, 1], 'width_ratios': [1, 2]})
axes[0, 0].plot([1, 2, 3], [4, 5, 6])
axes[0, 1].plot([1, 2, 3], [6, 4, 5])
axes[1, 0].plot([1, 2, 3], [2, 4, 1])
axes[1, 1].plot([1, 2, 3], [5, 3, 1])
plt.tight_layout()
plt.show()
これは、よりクリーンな構文でgridspec
の例と同様の結果を実現します。ここで各サブプロットは1つのセルを占めていることに注意してください。複数のセルにまたがるには、より柔軟なgridspec
アプローチが必要です。
subplot2grid
による正確な配置
subplot2grid
関数は、行と列のインデックス、および各サブプロットのサイズとグリッド内の位置を定義するrowspan
とcolspan
属性を使用して、サブプロットの配置を正確に制御します。
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 6))
ax1 = plt.subplot2grid((2, 2), (0, 0), rowspan=1, colspan=1)
ax2 = plt.subplot2grid((2, 2), (0, 1), rowspan=1, colspan=2)
ax3 = plt.subplot2grid((2, 2), (1, 0), rowspan=1, colspan=2)
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.plot([1, 2, 3], [6, 4, 5])
ax3.plot([1, 2, 3, 4, 5], [2, 4, 1, 3, 5])
plt.tight_layout()
plt.show()
強力な一方、subplot2grid
は複雑なレイアウトでは可読性が低下する可能性があります。ニーズに最適な方法を選択してください。柔軟性にはgridspec
、簡潔な単純なレイアウトにはgridspec_kw
、個々のサブプロットの位置の正確な制御にはsubplot2grid
です。
要素の重なりを防ぎ、クリーンでプロフェッショナルな外観を確保するために、常にplt.tight_layout()
を使用してください。