今回は、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()
は、入力データの折れ線グラフを表示します。
この記事もチェック:Pythonとmatplotlibでエラーバーのグラフを作成する方法
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' )
|
各軸を2次元配列に配置されたオブジェクトと考え、各サブプロットにアクセスすることは2次元配列の要素にアクセスすることと似ています。
- ax[0][0]は、まず最初の行(インデックス0)とその行の最初の要素(インデックス0)を選択したことを意味します。
- ax[1][1]は、2行目(インデックス1)とその行から2番目の要素(インデックス1)を最初に選択したことを意味します。
3. 軸を共有する matplotlib Subplots
多くのアプリケーションでは、サブプロットの軸を互いに一致させる必要があります。
matplotlib subplots() メソッドは、2つの引数 sharex
と sharey
を受け取り、すべてのサブプロット軸が同じスケールになるようにします。
4. add_subplot() メソッドの使用法
add_subplotは、matplotlib の
figure` オブジェクトの属性の1つです。
これは、図にサブプロットを 1 つずつ追加したいときに使用されます。
それでは、サンプルコードでその様子をご覧ください。
上のコードでは、figure オブジェクトの add_subplot
属性は、入力引数として行と列の数、およびサブプロットのインデックスを必要とします。
しかし、ここでは、サブプロットのインデックスを 2 次元配列として指定するのではなく、単に図の番号に似た整数を渡すだけでよいのです。
上記のコードの fig.add_subplot(2, 2, 1)
は、まず2×2グリッドのサブプロットを作成し、その上にデータをプロットできる1番目のサブプロットの軸オブジェクトを返します。
この記事もチェック:Pythonのmatplotlibを使って3次元プロットを実装する方法
まとめ
この記事では、1つの図に複数のプロットを表示する方法、subplots
メソッドの使用、サブプロットを作成する多くの方法について説明しました。