Data Visualization

Matplotlibサブプロットサイズのマスター:3つの強力な方法

Spread the love

Matplotlibは視覚化を作成するための強力なツールを提供しており、サブプロットのサイズをカスタマイズすることは効果的なコミュニケーションの鍵となります。この記事では、Matplotlibでサイズが異なるサブプロットを作成するための3つの方法について説明し、それぞれについて明確な例と説明を示します。

目次

柔軟なサブプロットレイアウトのためのgridspecの使用

matplotlib.gridspecモジュールは、サイズが異なるサブプロットを作成するための最も柔軟なアプローチを提供します。グリッドを定義し、height_ratioswidth_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関数は、行と列のインデックス、および各サブプロットのサイズとグリッド内の位置を定義するrowspancolspan属性を使用して、サブプロットの配置を正確に制御します。


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()を使用してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です