Python

Python初学者向け:複数のグラフを並べて描く方法を基本から解説

スポンサーリンク

 

この記事はこんな方におススメです
  • Pythonを始めたばかりで基本から学びたい方
  • Pythonの基本的な部分を速習してまずは全体像を把握しておきたい方

▶ matplotlibによる可視化を基本から解説しています。以下の投稿も合わせてご覧ください。

はじめに

今回は複数のグラフを並べて描く方法を基本から解説します。グラフを重ねて描くこともありますが、並べて比較したいときもありますね。いくつかのやり方があるうえに、使用するメソッド名も似ているので混乱することもあると思います。今回はこれらを整理しましょう。

複数のグラフを並べて描く

plt.subplot()を使う

まず最初はplt.subplot()を使うやり方です。はじめに書式を確認しておきましょう。

plt.subplot(nrows, ncols, index)

nrows, ncolsでグラフの領域を何行・何列でいくつか作るかを指定します。その後に、実際に描画するのはその何番目の領域にするかを指定します。

やってみましょう。

# ライブラリのインポート
import numpy as np
import matplotlib.pyplot as plt

# 複数のグラフを並べて描く
x = np.linspace(-10,10,100)

plt.subplot(1,3,1)
plt.plot(x,x)

plt.subplot(1,3,2)
plt.plot(x, x**2)

plt.subplot(1,3,3)
plt.plot(x, x**3)
plt.subplot()で複数のグラフを並べて描く

plt.subplot(1,3,1)は、nrows=1, ncols=3, index=1であり、1行3列の領域の1番目を表します。indexの部分はわかりにくいのですが、(0番目からではなく)1から数えます。このように領域をしていてしてから、plt.plot()でプロットします。

同様にplt.subplot(1,3,2)は、1行列の領域の2番目を表します。以下、同様です。わかりやすいですね。

add_subplot()を使う

figオブジェクトを作成( plt.figure() )して、そこにaxのオブジェクトを加えていく( add_subplot() )というやり方です。次のような手順になります。

fig = plt.figure()
ax1 = fig.add_subplot(nrows, ncols, index)

確認していきましょう。

fig = plt.figure(figsize=(12,4))
ax1 = fig.add_subplot(1,3,1)
ax1.plot(x,x)

ax2 = fig.add_subplot(1,3,2)
ax2.plot(x, x**2)

ax3 = fig.add_subplot(1,3,3)
ax3.plot(x, x**3)
add_subplot()で複数のグラフを並べて描く

さっきと似ているので簡単ですね。figオブジェクトを先に作っておいて、そのfigに対してadd_subplot()の操作でaxオブジェクトを作っています。

plt.subplots()を使う

最後にplt.subplots()です。複数形となるので注意してください。これはfigオブジェクトとaxオブジェクトを同時に作るやり方です。

fig, axes = plt.subplots(nrows=1, ncols=1)

nrows, ncolsで何行何列の領域にするかを決めます。defaultではnrows=1, ncols=1となっており1行1列の領域となります。試してみましょう。

# fig, axesオブジェクトを作る
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(12,4))

# 描画する
axes[0].plot(x, x)
axes[1].plot(x, x**2)
axes[2].plot(x, x**3)
plt.subplots()を使って複数のグラフを並べて描く

plt.subplots(nrows=1, ncols=3)で1行3列の領域を作っています。領域の場所は0から番号が振られているので、axes[0]は1行1列、axes[1]は1行2列、asex[2]は1行3列の領域を表します。

次に、行方向を増やしてみましょう。

# fig, axesオブジェクトを作る
fig, axes = plt.subplots(nrows=2, ncols=3,figsize=(12,4))

# 描画する
axes[0].plot(x, x)
axes[1].plot(x, x**2)
axes[2].plot(x, x**3)
エラー画面

エラーが出てしまいました。行または列の一方が1である場合は、先頭から順番にインデックスが割り振られるのですが、今回のような場合は行番号・列番号を指定する必要があります。次のようにします。

# fig, axesオブジェクトを作る
fig, axes = plt.subplots(nrows=2, ncols=3,figsize=(12,4))

# 描画する
axes[0,1].plot(x, x)
axes[1,1].plot(x, x**2)
axes[1,2].plot(x, x**3)
行番号・列番号で領域を指定して描画する

今度はうまくいきました。行番号・列番号ではなく通し番号で指定したい場合は次のようにすることもできます。

# fig, axesオブジェクトを作る
fig, axes = plt.subplots(nrows=2, ncols=3,figsize=(12,4))
axes = axes.flatten()

# 描画する
axes[0].plot(x, x)
axes[1].plot(x, x**2)
axes[5].plot(x, x**3)
flatten()を使って通し番号で領域を指定する
スポンサーリンク

まとめ

今回は複数のグラフを並べて描く方法を解説しました。まとめて学んでおいた方が混乱しないですね。私は、それぞれの方法を別々の機会で学んだので混乱してました。

しっかり復習して使いこなせるようにしておきましょう。

コメント

タイトルとURLをコピーしました