Python
 Computer >> コンピューター >  >> プログラミング >> Python

Python・Matplotlib入門:ループと関数を使って複数のサブプロットにデータを一括描画する方法

Matplotlibで複数のサブプロット(axes)を扱う場合、1つずつ手作業でプロットするのは非効率です。そこで役立つのが「ループ」と「関数」を組み合わせた手法です。この記事では、3行×2列のグリッド状に配置されたサブプロットに対して、ランダムな時系列データを一括で描画する方法を解説します。

実装の手順

  • 図のサイズと余白の設定: plt.rcParams を使ってフィギュアサイズを指定し、figure.autolayout を有効にすることで、サブプロット間や図の外周のパディングを自動調整します。

  • サブプロットの作成: plt.subplots(3, 2) を呼び出し、行数3・列数2の図とサブプロット(axes配列)を一度に生成します。

  • 列を処理する関数の定義: 各行に含まれる列(axes)を順番に取り出し、plot() メソッドでxデータを赤色の折れ線として描画する関数 iterate_columns() を作成します。

  • 行のループ処理: axes配列の各行を反復処理しながら、正規分布に従う乱数から累積和(時系列データ)を生成し、iterate_columns() 関数に渡します。これにより、同じ行内のすべてのサブプロットに同じデータが描画されます。

  • 図の表示: 最後に plt.show() を呼び出して、完成したグラフを画面に表示します。

サンプルコード

import numpy as np
import matplotlib.pyplot as plt

# フィギュアサイズと自動レイアウトの設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

# 3行 × 2列 のサブプロットを作成
fig, axes = plt.subplots(3, 2)

""" 列方向のaxesを反復処理してプロットする関数 """
def iterate_columns(cols, x):
    for col in cols:
        col.plot(x, color='red')

""" 行方向のaxesを反復処理 """
for row in axes:
    # 平均0・標準偏差1の乱数100個の累積和で時系列データを生成
    x = np.random.normal(0, 1, 100).cumsum()
    iterate_columns(row, x)

plt.show()

コードのポイント解説

plt.subplots(3, 2) が返す axes は2次元配列のような構造になっており、for row in axes と書くことで「各行」を、さらにその中で for col in cols と書くことで「各行の各列」を順番に取得できます。この二重構造を利用することで、6つのサブプロットすべてを簡潔なコードで操作できるのが大きなメリットです。

また、np.random.normal(0, 1, 100).cumsum() は、平均0・標準偏差1の正規分布に従う乱数を100個生成し、それらを累積加算することでランダムウォーク的な時系列データを作り出しています。ループの各回で新しいデータが生成されるため、行ごとに異なる波形が描画されます。

このパターンは、ヒートマップのグリッド表示や、カテゴリ別の比較チャートなど、多数のグラフを規則的に配置したい場面で幅広く応用できます。ぜひ自身のデータ可視化にも活用してみてください。

  1. Matplotlibのループプロットでマーカーとラインに同じ色を設定する方法

    Matplotlibでループ処理により複数のデータ系列を描画する際、「マーカー」と「ライン」に同じ色を割り当てたい場面はよくあります。本記事では、そのための基本的な手順と、色を確実に揃えるための実践的な方法をコード例とともに解説します。 基本の手順 numpy を使用して m、n、x のデータポイントを初期化します。 figure() メソッドで新しい図を作成、または既存の図をアクティブ化します。 clf() メソッドで図をクリアします。 subplot() メソッドで現在の図にサブプロットを追加します。 itertools.cycle を利用して、複数種類のマーカーを順番に取得できるよう

  2. Matplotlibでcontourfプロットとsurface_plotを重ねて表示する方法

    Matplotlibでcontourf(塗りつぶし等高線)プロットとsurface_plot(3Dサーフェスプロット)を同じ図上に重ねて表示するには、以下の手順に従います。numpyを使用して、delta、xrange、yrange、x、y の各変数を初期化します。figure()メソッドで新しい図を作成するか、既存の図をアクティブにします。projection=3d を指定して、現在の軸(Axes)を取得します。x と y のデータポイントをもとに、3D等高線プロットを作成します。x と y のデータポイントをもとに、サーフェス(表面)をプロットします。図を表示するには、show()メソッド