【matplotlib】複数のグラフを一括表示:subplots[Python]

  • URLをコピーしました!
目次

複数のグラフを一括表示

ここ最近は数回に渡って2軸のグラフを表示する方法を解説してきました。

その際に最初の方にこの様なプログラムを書いたのを覚えているでしょうか?

fig = plt.figure()

ax1 = fig.subplots()
ax2 = ax1.twinx()

この時に用いた「subplots」というコマンドは実は複数のグラフを別々の場所に表示するコマンドだったりします。

ということで今回は複数のグラフを一括で別々のグラフとして表示する方法を解説します。

ただちょっと似た様なコマンドがありややこしいので少しずつ解説していきたいと思います。

subplotsを使って縦に二つグラフを並べてみる

まずは2軸グラフの際に使った「subplots」を使って複数のグラフを一括表示してみます。

といいつついきなり何個も一気に表示するのは大変なので、まずは2つから。

データはこんな感じ。

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

Xの値を1から10までにして、Yの値を2種類、2ずつ増加するリストと2倍に変化していくリストとしました。

二つのグラフを表示する際には、「fig = plt.figure()」としてグラフを描く宣言をしてから、「axes= fig.subplots(V, H)」とします。

fig = plt.figure()
axes= fig.subplots(V, H)

Vはグラフを縦に並べる数、Hはグラフを横に並べる数です。

まずは縦に二つグラフを並べてみます。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()
axes= fig.subplots(2)

axes[0].plot(x, y1)
axes[1].plot(x, y2)

plt.show()

データをプロットする位置を指定するには、axes[0]のようにリストのインデックス指定で行います。

実行するとこんなグラフが得られると思います。

ちなみに「axes= fig.subplots(V, H)」と二つの因数V、Hが必要かのように解説しましたが、縦に二つ並べる際にはVのみの指定で大丈夫です。

多分、Hはデフォルトで1とされるのだと思います。

subplotsを使って横に二つグラフを並べてみる

次に二つのグラフを横に並べてみましょう。

この場合は「axes= fig.subplots(1, 2)」というように因数VとHの両方が必要なことに注意してください。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

fig = plt.figure()
axes= fig.subplots(1, 2)

axes[0].plot(x, y1)
axes[1].plot(x, y2)

plt.show()

実行結果

横に二つグラフを並べることができました。

subplotsを使って縦横に2つずつのグラフを並べてみる

次は4つのグラフを縦横2つずつ並べてみましょう。

データはこんなふうに用意してみました。

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
y3 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y4 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

x、y1、y2は先ほどと同じで、y3は奇数を、y4は素数としてみました。

これを4つのグラフとして縦横2つずつ表示してみましょう。

fig = plt.figure()
axes= fig.subplots(2, 2)

縦横2つずつなので、fig.subplots(V, H)の引数V、Hには2、2と入力します。

データをプロットする場所の指定ですが、この場合はaxes[V][H]というように2つのインデックスで指定します。

先ほど同様Vが縦、Hが横方向です。

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y1 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
y2 = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
y3 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y4 = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

fig = plt.figure()
axes= fig.subplots(2, 2)

axes[0][0].plot(x, y1)
axes[1][0].plot(x, y2)
axes[0][1].plot(x, y3)
axes[1][1].plot(x, y4)

実行結果

y1のデータが左上、y2のデータが右下、y3のデータが右上、y4のデータが右下のグラフにプロットされました。

つまりインデックスの指定は左上が[0][0]、左下が[1][0]、右上が[0][1]、右下が[1][1]ということになります。

またグラフが増えれば、引数VとHの値は増えていきますが、縦2、横2の関係性さえ覚えておけば、他の位置も簡単に指定できると思います。

最初の2文の書き方

今回、最初に複数のグラフを書く準備として、「fig = plt.figure()」としてグラフを書く宣言をしてから、「axes= fig.subplots(V, H)」としました。

fig = plt.figure()
axes= fig.subplots(V, H)

ですが実はこの2文は一つにまとめることも可能ですし、普通はそう書かれていると思います。

fig, axes= plt.subplots(2, 2)

とりあえず動けばいいという私の考えでは覚えやす方で、もしくは使いやすい方で書けばいいのかなと思います。

とりあえずこれで複数のグラフを表示することができるようになりました。

ただ実は複数のグラフを一括で表示する方法はもう一つあります。

次回はそのもう一つの方法を解説していきたいと思います。

ということで今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次