はじめに
この実験では、Matplotlib でネストされた .GridSpec を使用して、サイズの異なるサブプロットのグリッドを作成する方法を学びます。これは、複雑なプロットのレイアウトを作成し、各プロットのサイズと間隔を制御したい場合に便利です。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使用して練習します。
場合によっては、Jupyter Notebook が読み込み完了するまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題が発生した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。
ライブラリのインポート
まず、必要なライブラリをインポートする必要があります。グラフを作成するために matplotlib.pyplot と、プロットするデータを生成するために numpy を使用します。
import matplotlib.pyplot as plt
import numpy as np
データの作成
このステップでは、プロットするためのデータを作成します。異なる周波数のサイン波とコサイン波を生成するために、squiggle_xy 関数を使用します。
def squiggle_xy(a, b, c, d):
i = np.arange(0.0, 2*np.pi, 0.05)
return np.sin(i*a)*np.cos(i*b), np.sin(i*c)*np.cos(i*d)
グラフと外側のグリッドを作成する
次に、add_gridspec 関数を使用してグラフと外側のグリッドを作成します。サブプロット間に余白をなくした 4x4 のグリッドを作成します。
fig = plt.figure(figsize=(8, 8))
outer_grid = fig.add_gridspec(4, 4, wspace=0, hspace=0)
内側のグリッドとサブプロットを作成する
このステップでは、ネストされた .GridSpec を使用して内側のグリッドとサブプロットを作成します。外側のグリッドの各セルをループし、各セルに対して 3x3 のグリッドを作成します。
for a in range(4):
for b in range(4):
## gridspec inside gridspec
inner_grid = outer_grid[a, b].subgridspec(3, 3, wspace=0, hspace=0)
axs = inner_grid.subplots() ## Create all subplots for the inner grid.
for (c, d), ax in np.ndenumerate(axs):
ax.plot(*squiggle_xy(a + 1, b + 1, c + 1, d + 1))
ax.set(xticks=[], yticks=[])
外側の罫線のみを表示する
このステップでは、内側のサブプロットの罫線を削除し、外側の罫線のみを表示します。これにより、グラフがクリーンに見えるようになります。
for ax in fig.get_axes():
ss = ax.get_subplotspec()
ax.spines.top.set_visible(ss.is_first_row())
ax.spines.bottom.set_visible(ss.is_last_row())
ax.spines.left.set_visible(ss.is_first_col())
ax.spines.right.set_visible(ss.is_last_col())
グラフを表示する
最後に、show() 関数を使用してグラフを表示します。
plt.show()
まとめ
この実験では、Matplotlib でネストされた .GridSpec を使用して、サイズの異なるサブプロットのグリッドを作成する方法を学びました。また、numpy を使ってデータを生成する方法と、サブプロットの罫線をカスタマイズする方法も学びました。この知識を使えば、サイズと間隔を精密に制御した複雑なグラフのレイアウトを作成できます。