YutaKaのPython教室

Python の文法やライブラリ、API、環境構築について画像・動画・ソースコード付きで徹底解説!

Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く

Pythonでグラフを描くときは、Matplotlibを使うことが多いですね。

  • Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?
  • subplotでグラフを並べられるらしいけど、使い方がよくわからない…。

という方のために、

  • plt.subplot()の基本的な使い方|縦・横に並べる例
  • 【応用編】異なるサイズのグラフを並べる方法

を画像付きで解説していきます!

plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう!

 

【PR】自走できるAI人材とは?まずは無料オンライン説明会へ

plt.subplot()の概要

plt.subplot()を使うと、一つの図の中に複数の小さなプロット(サブプロット)を配置することができます。

この例では、一つの図の中に、コンター(左側)と、曲線(右側)を出力しています。

仮にJupyter Notebookでplt.subplot()を使用しないと、次のように縦にズラーっと並びます。

plt.subplot()を使うのと使わないのと、どちらが見やすいかは一目瞭然ですね!

plt.subplot()使用の流れ

plt.subplot()では、次のステップを繰り返して、一つの図の中にグラフを追加していきます。

  1. plt.subplot()でグラフを描く場所を指定
  2. plt.plot()などでグラフを作成
  3. plt.subplot()で別の場所を指定
  4. 次のグラフを作成…(以後、繰り返し)

場所の指定、グラフの作成について、詳しく見ていきましょう。

subplot()でグラフを描く場所の指定

グラフを描く場所を指定するには、plt.subplot()の引数に3つの整数LMNを渡します。

import matplotlib.pyplot as plt
 
plt.subplot(LMN)

こうすると、

  • L, M, N:それぞれ一桁の正数
  • 図を縦にL個、横にM個に分割
  • 左上から数えてN番目の領域を指定

となります。

例えば、縦に2分割(L = 2)、横に3分割(M = 3)した場合の、各サブプロットの場所は下図のようになります。

例えば、

  • plt.subplot(231) ⇒ 左上を指定
  • plt.subplot(236) ⇒ 右下を指定

ということになります。

指定場所にプロット作成

plt.subplot()で場所を指定後に、pltの各種メソッドでグラフを作成します。

各種グラフの作成方法については、以下の記事を参考にしてください。

  • 折れ線グラフ:plt.plot()
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 
  • 円グラフ:plt.pie()
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
Matplotlibで円グラフを作成する方法がよくわからない…。何を設定すれば、自分の描きたい円グラフになるのかわからない!という方のために、「Matplotlibの円グラフ作成方法」、「Excel風の見た目に設定する方法」、「グラフやラベルの設定方法」についてまとめしました!これで自由に円グラフを作成できます!
www.yutaka-note.com/entry/matplotlib_pie
 
  • 棒グラフ:plt.bar()
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
Matplotlibで棒グラフを作成する方法がよくわからない…。 棒グラフで悩むなら、MatplotlibあきらめてExcel使おうかな…。 と思ったことはありませんか?そんな方のために、Matplotlibの棒グラフ作成方法を徹底的に解説しました!複数系列?積み上げ棒グラフ?全部大丈夫!
www.yutaka-note.com/entry/matplotlib_bar
 
  • 散布図:plt.scatter()
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
Matplotlibで散布図を作成する方法がよくわからない…。散布図って何のためにあるの?全部、plt.plotでグラフ作ればよくない?という方のために、「Matplotlibの散布図の作成方法、散布図を応用したデータの可視化例」についてまとめしました!
www.yutaka-note.com/entry/matplotlib_scatter
 

以下では、plt.subplot()の具体的な使用例を紹介していきます。

subplot()の使用例

次のサンプルデータをもとに使用例を紹介します。

import numpy as np
x = np.linspace(0, 3*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

横軸はNumPylinspace()で [0, 3π] を100等分した数列 x です。

縦軸は y1 = sin(x), y2 = cos(x) とします。

np.linspace()の詳細は、次の記事を参考にしてください。

≫【徹底図解】NumPy linspace | お手軽!等間隔の数列を作成
≫【徹底図解】NumPy linspace | お手軽!等間隔の数列を作成
NumPyで、等間隔の数列を作るにはどうすればいいの?!そんな疑問にお答えします。等間隔の数列を生成するには、NumPyの関数linspace()を使いましょう!この記事では、linspaceの使い方を、図解・サンプルコード付きで紹介します。類似関数arrangeとの使い分けについても、しっかり解説しています!
www.yutaka-note.com/entry/numpy_linspace
 

例1)グラフを縦に並べる

縦にグラフを2つ並べる例を紹介します。

  • plt.subplot(LMN)で、縦に2分割(L = 2)、横に1分割(M = 1
  • plt.subplot(211)で、上のグラフの位置指定
  • plt.subplot(212)で、下のグラフの位置指定

とする点がポイントです。

# 図のサイズを決める 
plt.figure(figsize=(5,5))
 
# 1つ目のグラフ 
plt.subplot(211) 
plt.plot(x, y1) 
 
# 2つ目のグラフ 
plt.subplot(212) 
plt.plot(x, y2, 'r--')

出力結果はこちらです。1つの図の中にグラフが縦に2つ並んでいます。

例2)グラフを横に並べる

横にグラフを2つ並べる例を紹介します。

  • plt.subplot(LMN)で、縦に1分割(L = 1)、横に2分割(M = 2
  • plt.subplot(121)で、左のグラフの位置指定
  • plt.subplot(122)で、右のグラフの位置指定

とする点がポイントです。

# 図のサイズを決める 
plt.figure(figsize=(5,5))
 
# 1つ目のグラフ 
plt.subplot(121) 
plt.plot(x, y1) 
 
# 2つ目のグラフ 
plt.subplot(122) 
plt.plot(x, y2, 'r--')

出力結果はこちらです。1つの図の中にグラフが縦に2つ並んでいます。

例3)グラフを縦横に並べる

縦横にグラフを2×2で並べる例を紹介します。

  • plt.subplot(LMN)で、縦に2分割(L = 2)、横に2分割(M = 2
  • plt.subplot(221)で、左上指定
  • plt.subplot(222)で、右上指定
  • plt.subplot(223)で、左下指定
  • plt.subplot(224)で、右下指定

とする点がポイントです。

# 縦横に並べる
plt.figure(figsize=(12,5))
 
# 左上のグラフ
plt.subplot(221)
plt.plot(x, y1)
 
# 右上のグラフ
plt.subplot(222)
plt.plot(x, y2, 'r--')
 
# 左下のグラフ
plt.subplot(223)
plt.plot(x, y1**2, "g.")
 
# 右下のグラフ
plt.subplot(224)
plt.plot(x, y2**2, 'c-.')

出力結果はこちらです。1つの図の中にグラフが縦に2つ並んでいます。

【PR】Matplotlib関連の書籍はこちら

【応用編】異なるサイズのグラフを並べる

plt.subplot()の領域指定を工夫すると、サイズの異なるグラフを一つの図の中に表示することもできます。

# 標準正規分布を計算する関数
def f_norm(x):
    return 1/np.sqrt(2*np.pi)*np.exp(-0.5*x**2)
 
# xとyの値を準備
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
# z は正規分布の積
z = np.tensordot( f_norm(x), f_norm(y), axes=0)
 
# 左半分にコンター
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.contourf(x,y,z)
 
# 右半分にプロット
plt.subplot(322)
plt.plot(y,z[30,:], "--")
plt.ylim(0,0.2)
 
plt.subplot(324)
plt.plot(y,z[50,:], "r")
plt.ylim(0,0.2)
 
plt.subplot(326)
plt.plot(y,z[90,:], "c-.")
plt.ylim(0,0.2)

出力結果はこちらです。

ポイントになるのはのplt.subplot()の領域指定方法です。

  • plt.subplot(121)で、図の左半分を指定
  • plt.subplot(322)で、図の右上を指定
  • plt.subplot(324)で、図の右中央を指定
  • plt.subplot(326)で、図の右下を指定

下図のように、領域が重ならないようにplt.subplot()の位置指定をしています。

使用済みの領域を指定すると、先に描いていたグラフは表示されないという点に注意しましょう。

上の例ではコンターで使用済み領域(321)(323)(325)に、後からグラフを追加してしまうと、コンターは表示されなくなります。

まとめ

plt.subplot()を用いて、一つの図の中に複数のグラフを並べる方法を紹介しました。

  • plt.subplot()でグラフを追加する場所を指定
  • plt.plot()などでグラフを作成

を繰り返すという点がポイントです!

plt.subplot()をマスターして、キャッチーな伝わるグラフを目指しましょう!

もっとMatplotlibを自由自在に操作したい!という方へのおススメコンテンツはこちらです!

≫Matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業
≫Matplotlib inline の謎解明! |「書けと言われたので書いています」から卒業
Jupyter Notebookでmatplotlibを使用する場合には、インポートする前に%matplotlib inlineと記述します。なぜinlineと入力しているのでしょうか?この記事では、matplotlib inlineの謎について解説していきたいと思います!
www.yutaka-note.com/entry/matplotlib_inline
 
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
≫Matplotlib plt.textよく使うもの徹底解説|テキスト表示をマスター!
グラフ内にテキストでコメントを記入することってよくありますよね?グラフにコメントがあると、グラフの大事な部分を強調して説明できます。この記事では、matplotlibでグラフ内にテキストを表示する方法、テキストの見た目の変更方法について図解・サンプルコード付きで解説しています!
www.yutaka-note.com/entry/2020/01/08/080413
 
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
 
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
 
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
≫Matplotlib 棒グラフを徹底解説|複数系列・積み上げ棒グラフ全てOK
Matplotlibで棒グラフを作成する方法がよくわからない…。 棒グラフで悩むなら、MatplotlibあきらめてExcel使おうかな…。 と思ったことはありませんか?そんな方のために、Matplotlibの棒グラフ作成方法を徹底的に解説しました!複数系列?積み上げ棒グラフ?全部大丈夫!
www.yutaka-note.com/entry/matplotlib_bar
 
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
≫Matplotlib 散布図を徹底解説!|基本設定からバブルチャートまで
Matplotlibで散布図を作成する方法がよくわからない…。散布図って何のためにあるの?全部、plt.plotでグラフ作ればよくない?という方のために、「Matplotlibの散布図の作成方法、散布図を応用したデータの可視化例」についてまとめしました!
www.yutaka-note.com/entry/matplotlib_scatter
 
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
≫Matplotlib 円グラフ作成方法|Excel風グラフ、ドーナツグラフも解説
Matplotlibで円グラフを作成する方法がよくわからない…。何を設定すれば、自分の描きたい円グラフになるのかわからない!という方のために、「Matplotlibの円グラフ作成方法」、「Excel風の見た目に設定する方法」、「グラフやラベルの設定方法」についてまとめしました!これで自由に円グラフを作成できます!
www.yutaka-note.com/entry/matplotlib_pie
 
≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く
≫Matplotlib subplotの使い方徹底図解!|一つの図に複数グラフを描く
Matplotlibで一つの図の中に複数のグラフを並べるにはどうすればいいの?subplotでグラフを並べられるらしいけど、使い方がよくわからない!という方のために、「plt.subplot()の基本的な使い方」を画像付きで解説していきます!plt.subplot()でプロットをキレイに配置して、見やすく人に伝わるグラフを目指しましょう!
www.yutaka-note.com/entry/2020/01/02/232925
 
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
≫【完全保存版】Matplotlib plt.plot徹底解説 | 基本操作を総まとめ!
Matplotlibのplt.plotを使用したグラフを作成、グラフの見た目変更、タイトルや軸の設定など基本事項について徹底解説!!この記事を読めば、plt.plotで手軽に手早く簡単に、キレイなグラフ作成可能に!?
www.yutaka-note.com/entry/matplotlib_pyplot
 
≫Matplotlib アニメーション作成入門編 |ArtistAnimation徹底解説!
≫Matplotlib アニメーション作成入門編 |ArtistAnimation徹底解説!
Matplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。「 Matplotlibでアニメーションを描きたいけど、何から始めればいいの?」という方のために、 Matplotlibでアニメーションを超簡単に作成・保存する方法、アニメーション作成用の超基本テンプレを画像・サンプルコード付きで紹介していきます!
www.yutaka-note.com/entry/matplotlib_artist_anim
 
≫Matplotlib FuncAnimation徹底解説|更新用関数はこう作ればいい!
≫Matplotlib FuncAnimation徹底解説|更新用関数はこう作ればいい!
Matplotlibではアニメーションも作成できますが、初めての人には少し複雑です…。「Matplotlibでアニメーションを描きたいけど、よくわからない!」、「FuncAnimationで更新用関数作るって何?意味不明!!」という方のために、FuncAnimationでアニメーションを作成する超基本、更新用関数の作成方法、重要メソッドを画像・サンプルコード付きで紹介していきます!
www.yutaka-note.com/entry/matplotlib_func_anim
 
Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
 

Twitter@YutaKaでは、ほぼ毎日pythonに関する情報を発信しています。

気楽にツイートしているので、気軽にフォローしてください!