0Pricing
Python Academy · レッスン

サブプロットとレイアウト

複数のグラフを組み合わせます

「サブプロットとレイアウト」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

複数のグラフを使う理由

1つのグラフだけでは不十分なことがよくあります。複数の視点を横に並べて比較したり、複雑なプロットを小さなパネルに分けたりする場合があります。Matplotlibでは、1つのFigure内に複数のAxesを配置すると表現します。

主なツールはplt.subplots(rows, cols)です。

Axesのグリッド

fig, axes = plt.subplots(2, 3)は2行3列のグリッドを持つFigureを作成し、6つのAxesを用意します。axesの結果は2次元配列で、axes[0][1]のようにインデックスを指定します。

パネルの総数は、行数と列数を掛けるだけで求められます。

rows, cols = 2, 3
total = rows * cols
print('Grid', rows, 'x', cols, '=', total, 'axes')
for r in range(rows):
    for c in range(cols):
        print('panel at', (r, c))

Axes配列のインデックス指定

1行だけの場合、axesは1次元なので、axes[0]やaxes[1]を使います。完全なグリッドの場合は2次元なので、axes[row][col]を使います。

サブプロットが1つだけの場合は、インデックス指定はまったく必要ありません。

パネルの反復処理

グリッドを平坦化してループし、各Axesとデータを組み合わせるのがわかりやすいパターンです。これにより、各パネルでほとんど同じコードを繰り返さずに済みます。

datasets = ['A', 'B', 'C', 'D']
# imagine axes flattened to a list of 4
for i, name in enumerate(datasets):
    print('Plot dataset', name, 'on flat axes index', i)

Axesの共有

パネル間でスケールを共有する場合は、sharex=Trueまたはsharey=Trueを渡します。サブプロットが共通の範囲を使うため、公平に比較でき、重複した目盛りラベルもなくせます。

縦に並べた時系列に最適です。

グリッドのFigureサイズ

グリッドには1つのプロットより広いスペースが必要です。subplotsを呼び出すときに、figsize=(width, height)でインチ単位のサイズを設定します。目安として、列数と行数に応じてサイズを拡大します。

cols, rows = 3, 2
per_panel_w, per_panel_h = 3, 2.5
print('Suggested figsize:', (cols * per_panel_w, rows * per_panel_h))

パネル間の間隔

パネル同士が詰まりすぎることがあります。fig.tight_layout()を使うと、ほとんどの場合は自動的に解決できます。より細かく制御するには、fig.subplots_adjust(wspace=0.4, hspace=0.4)で水平方向と垂直方向の間隔を設定します。

値を大きくすると、サブプロット間のスペースが広がります。

GridSpecによる不均一なレイアウト

すべてのレイアウトが均一なグリッドになるとは限りません。GridSpecを使うと、1つのAxesを複数の行または列にまたがらせられます。たとえば、上部に幅の広いグラフ、下部に小さなグラフを2つ配置できます。

グリッドを定義してから、配列のようにスライスし、各Axesを配置します。

範囲の計画

GridSpecのスライスは範囲のように考えます。すべての列にまたがる上部のグラフはgs[0, :]、左下のグラフはgs[1, 0]です。先に紙の上でスライスを計画しておくと、混乱を避けられます。

layout = {
    'header': '[0, :]   (full width)',
    'left':   '[1, 0]   (bottom left)',
    'right':  '[1, 1]   (bottom right)',
}
for name, slot in layout.items():
    print(name.ljust(7), slot)

1つのFigureに1つのストーリー

複数パネルのFigureでも、1つのまとまりのあるストーリーを伝える必要があります。共通のfig.suptitle()、統一した色、共有スケールを使い、無作為なコラージュではなく1つの単位としてパネルを読めるようにします。

パネルごとのカスタマイズ

各セルはそれぞれ独自のAxesなので、個別にカスタマイズできます。axes[0][0].set_title('Sales')は左上のパネルだけにタイトルを付け、axes[1][1].set_ylabel('Cost')は右下のパネルだけにラベルを付けます。

この独立性があるからこそ、グリッドではオブジェクト指向スタイルが力を発揮します。

理解度チェック

複数パネルのレイアウトについて理解度を確認しましょう。

まとめ

これで、グラフを組み合わせられるようになりました。

  • plt.subplots(rows, cols)でAxesのグリッドを作成します
  • axes[row][col]でインデックスを指定するか、平坦化してループします
  • sharex/shareyでスケールを揃え、figsizeでグリッドのサイズを設定します
  • tight_layoutとsubplots_adjustで間隔を調整します
  • GridSpecで複数のセルにまたがるパネルを作成できます

よくある質問

「サブプロットとレイアウト」レッスンは無料ですか?

はい。「サブプロットとレイアウト」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「サブプロットとレイアウト」で何を学びますか?

複数のグラフを組み合わせます ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「サブプロットとレイアウト」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. FigureとAxes
  2. 折れ線、棒、散布図
  3. プロットのカスタマイズ
  4. サブプロットとレイアウト
← Python Academyに戻る