【Python】matplotlibで複数のグラフを作る方法

matplotlib_グラフ_複数

matplotlibでグラフを書く時、同時に複数の表示させたい時があります。本記事では、「複数のグラフを重ねる」方法と、「複数のグラフを並べる」方法を解説します。

matplotlibのグラフの概念

matplotlibのグラフを理解する上で欠かせない二つの概念を紹介します。

  • Figure
  • Axes

全てのグラフは、Figure(グラフ)の中にあるAxes(軸)で構成されていると考えます。 

matplotlib_グラフ_複数
matplotlibnの概念図

このこと二つを意識すると、matplotlibでのグラフの概念を容易に理解できるようになります。

matplotlibで複数のグラフを並べて表示する方法

まずは、非常に簡易的なコードを紹介します。

import matplotlib.pyplot as plt #モジュールのインポート

Figure = plt.figure() #全体のグラフを作成
ax1 = Figure.add_subplot(2,2,1) #1つ目のAxを作成
ax2 = Figure.add_subplot(2,2,2) #2つ目のAxを作成
ax3 = Figure.add_subplot(2,2,3) #3つ目のAxを作成
ax4 = Figure.add_subplot(2,2,4) #4つ目のAxを作成

x = [1,2,3,4,5,6,7,8,9] #x軸用のデータ
y=[1,4,9,16,25,36,49,64,81] #y軸用のデータ

ax1.plot(x,y) #1つ目のAxにデータのプロット
ax2.plot(x,y) #2つ目のAxにデータのプロット
ax3.plot(x,y) #3つ目のAxにデータのプロット
ax4.plot(x,y) #4つ目のAxにデータのプロット

上記のコードを実行すると、以下のようにグラフが生成されます。(Figureで呼び出すことができる)

参考記事:グラフを写真として保存する方法

生成されるグラフ

詳しく説明します。

まず、plt.figure()で、全体としてのグラフ(Figure)を定義しています。そうしたら、このFigureという親グラフに対して、子グラフを追加していきます。
subplot()メソッドで、子グラフを定義することができます。

subplot()は、3つの数字を引数として取ります。

ax1 = Figure.subplot(2,2,1)

とした場合は、「子グラフを2×2の計4つのうち、一つ目の子グラフとしてax1を定義」しています。
引数を(2,2,4)とすれば、4つ目の子グラフとして定義できるというわけです。

matplotlibで複数のグラフを重ねて表示する方法

matplotlibで複数のグラフを重ねて表示させるのは大変簡単です。

import matplotlib.pyplot as plt #モジュールのインポート

Figure, ax = plt.subplots() #親グラフと子グラフを同時に定義

x = [i for i in range(10)] #x軸のデータを定義
y = [1,2,3,4,5,6,7,8,9,10] #y軸のデータを設定
y2 = [2,4,6,8,10,12,14,16,18,20] #y軸のデータを設定
y3 = [3,6,9,12,15,18,21,24,27,30] #y軸のデータを設定
y4 = [4,8,12,16,20,24,28,32,36,40] #y軸のデータを設定

#グラフを重ね合わせるには、1つのaxに対して、何んどもプロットをすれば良い
ax.plot(x,y) 
ax.plot(x,y2)
ax.plot(x,y3)
ax.plot(x,y4)

以下は結果です。

matplotlib_グラフ_重ねる
出力されるグラフ

ここで、グラフの定義方法を不思議に思うかも知れません。

Figure, ax = plt.subplots()

と記述すると、子要素が1つだけの、グラフを生成していることになります。そして、データをプロットするのは、やはり子グラフであるaxに対してです。

Matplotlibでのグラフの定義様々は様々ですが、この方法は、公式チュートリアルで紹介されている方法なので、ぜひ覚えておいてください。

この記事は、「Pythonによるデータ分析入門 第2版」を参考にしました。