matplotlibのSubplots使って複数のグラフをプロット(描画)する方法

スポンサーリンク

今回は、matplotlibのサブプロットを作成する方法を学びます。

実際には、変数を可視化するために複数のプロットが必要になることがよくありますが、そのようなときにサブプロットが登場します。

matplotlib のサブプロットメソッドは、1つの図に複数のプロットを作成するために提供される便利な関数です。

スポンサーリンク

matplotlib を使って基本的なプロットを作成する

matplotlib でプロットを作成するのは簡単な作業で、いくつかの入力パラメータと一緒に 1 行のコードで実現できます。

以下のコードは、1つの図形で簡単なプロットを行う方法を示しています。

#Importing required libraries
import matplotlib.pyplot as plt
import numpy as np
 
#Create data
data = np.arange(1,5,1)
 
#Plotting the data:
plt.plot(data)
#Importing required libraries
import matplotlib.pyplot as plt
 
# Creates fig and ax from subplots().
fig , ax = plt.subplots(nrows = 2, ncols = 2)

plt.plot() は、入力データの折れ線グラフを表示します。

matplotlib のサブプロットを作成する

さて、データを説明するために複数のプロットを用意する必要がある状況を考えてみましょう。

例えば、気温と降水量を変数とするデータセットがあり、そのデータを視覚化する必要があるとします。

思いつくのは、両方の変数を1つのプロットにすることですが、温度(ケルビン)の測定尺度は降雨量(mm)のそれとは異なります。

ここでは、視覚的に解釈するために、両者を別々のプロットにする必要があります。

matplotlib の subplot は、複数のプロットを作成するために必要なもので、これからこれを詳しく調べます。

1. subplots() メソッドの使用法

matplotlib.subplots` を使用するためのいくつかの視点を持ってみましょう。

matplotlib subplots() メソッドは、いくつかの行といくつかの列を入力引数として必要とし、figure オブジェクトと axes オブジェクトを返します。


各軸オブジェクトは単純なインデックスを使用してアクセスすることができます

そして、プロットするために必要な軸を選択した後は、上記のコードで行ったように、プロットのための手順は通常のコースに従います。

それでは、格子状に並んだ4つのサブプロットを作成してみましょう。

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
 
#Loading Dataset
data = load_iris()
df = data.data
 
fig , ax = plt.subplots(nrows = 2, ncols = 2, figsize=(8,6))
 
#Plotting on the 1st axes
ax[0][0].scatter(df[:,0],df[:,1] , color = 'black')
 
#Plotting on the last axes
ax[1][1].scatter(df[:,1],df[:,2] , color = 'red')
#Import required libraries
import matplotlib.pyplot as plt
 
#Plotting
fig, ax = plt.subplots(2, 3, sharex=True, sharey=True)
for i in range(0,2):
    for j in range(0,3):
        ax[i][j].text(0.5, 0.5, str((i,j)),fontsize=18, ha='center')

2. サブプロットへのアクセス

個々の軸へのアクセスは非常に簡単です。

最初のサブプロットと最後のサブプロットでプロットしてみましょう。

#Importing libraries
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
 
#Loading Data to plot
data = load_iris()
df = data.data
 
#Create a figure object
fig = plt.figure(figsize=(8,8))
 
#Adding one subplot to the figure
ax_1 = fig.add_subplot(2, 2, 1) #selecting 1st out of 4 subplots
ax_1.scatter(df[:,0],df[:,1] , color = 'black')
 
#Adding one more subplot
ax_2 = fig.add_subplot(2,2,4)
ax_2.scatter(df[:,0],df[:,1] , color = 'red')
Simple Plotting
Simple Plotting

各軸を2次元配列に配置されたオブジェクトと考え、各サブプロットにアクセスすることは2次元配列の要素にアクセスすることと似ています。

  • ax[0][0]は、まず最初の行(インデックス0)とその行の最初の要素(インデックス0)を選択したことを意味します。
  • ax[1][1]は、2行目(インデックス1)とその行から2番目の要素(インデックス1)を最初に選択したことを意味します。

3. 軸を共有する matplotlib Subplots

多くのアプリケーションでは、サブプロットの軸を互いに一致させる必要があります。

matplotlib subplots() メソッドは、2つの引数 sharexsharey を受け取り、すべてのサブプロット軸が同じスケールになるようにします。

4 Subplots
4 Subplots
Accessing 1st And 4th Subplots
Accessing 1st And 4th Subplots

4. add_subplot() メソッドの使用法

add_subplotは、matplotlib のfigure` オブジェクトの属性の1つです。

これは、図にサブプロットを 1 つずつ追加したいときに使用されます。

それでは、サンプルコードでその様子をご覧ください。

Subplot With Shared Axis 1
Subplots with Shared Axis
Adding Subplots One By One
Adding Subplots One By One

上のコードでは、figure オブジェクトの add_subplot 属性は、入力引数として行と列の数、およびサブプロットのインデックスを必要とします。

しかし、ここでは、サブプロットのインデックスを 2 次元配列として指定するのではなく、単に図の番号に似た整数を渡すだけでよいのです。

上記のコードの fig.add_subplot(2, 2, 1) は、まず2×2グリッドのサブプロットを作成し、その上にデータをプロットできる1番目のサブプロットの軸オブジェクトを返します。

まとめ

この記事では、1つの図に複数のプロットを表示する方法、subplotsメソッドの使用、サブプロットを作成する多くの方法について説明しました。

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