matplotlibでグラフを書く時、同時に複数の表示させたい時があります。本記事では、「複数のグラフを重ねる」方法と、「複数のグラフを並べる」方法を解説します。
matplotlibのグラフの概念
matplotlibのグラフを理解する上で欠かせない二つの概念を紹介します。
- Figure
- Axes
全てのグラフは、Figure(グラフ)の中にあるAxes(軸)で構成されていると考えます。
このこと二つを意識すると、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)
以下は結果です。
ここで、グラフの定義方法を不思議に思うかも知れません。
Figure, ax = plt.subplots()
と記述すると、子要素が1つだけの、グラフを生成していることになります。そして、データをプロットするのは、やはり子グラフであるaxに対してです。
Matplotlibでのグラフの定義様々は様々ですが、この方法は、公式チュートリアルで紹介されている方法なので、ぜひ覚えておいてください。
この記事は、「Pythonによるデータ分析入門 第2版」を参考にしました。