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個生成し、それらを累積加算することでランダムウォーク的な時系列データを作り出しています。ループの各回で新しいデータが生成されるため、行ごとに異なる波形が描画されます。
このパターンは、ヒートマップのグリッド表示や、カテゴリ別の比較チャートなど、多数のグラフを規則的に配置したい場面で幅広く応用できます。ぜひ自身のデータ可視化にも活用してみてください。
-
Matplotlibのループプロットでマーカーとラインに同じ色を設定する方法
Matplotlibでループ処理により複数のデータ系列を描画する際、「マーカー」と「ライン」に同じ色を割り当てたい場面はよくあります。本記事では、そのための基本的な手順と、色を確実に揃えるための実践的な方法をコード例とともに解説します。 基本の手順 numpy を使用して m、n、x のデータポイントを初期化します。 figure() メソッドで新しい図を作成、または既存の図をアクティブ化します。 clf() メソッドで図をクリアします。 subplot() メソッドで現在の図にサブプロットを追加します。 itertools.cycle を利用して、複数種類のマーカーを順番に取得できるよう
-
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()メソッド