Matplotlibで複数のグラフを作る方法

Pythonのグラフ作成ライブラリであるMatplotlibを使って複数のグラフを作成する方法について。

今回はsubplotを使ったシンプルな方法で作成する。

完成形のイメージはコレ。

Matplotlibで作る複数のグラフ

折れ線グラフ、棒グラフ、横棒グラフ、散布図という種類の異なる4つのグラフを一度で表示してみることにする。

figureとsubplot

Matplotlibで複数のグラフを作るにはfigureとsubplotが必要になる。

subplotというのは1つの1つのグラフを表示する領域のことで、figureというのはsubplotを表示する領域のこと。

つまり、複数のグラフを表示するためには、まずfigureを作り、figureの中にsubplotを並べていくことになる。

figureとsubplotのイメージ
これは、figureとsubplotのイメージを図で表したもの。
大きなfigureという枠の中に4つのsubplot(グラフ)が並んでいる。

それぞれのグラフ(subplot)は、figureの中でどこに並べるかを指定する必要がある。

並べる場所の指定は、figureの中で何行目の何列目に位置すのかを指定することになる。行、列、何個目かの指定は、subplotを作成する時に(行, 列, 何個目)という形で行う。

例えば、上の図でsubplot1は2行2列の1つ目なので(2, 2, 1)となる。
同じように、subplot2は2行2列の2個目なので(2, 2, 2)、subplot3は2行2列の3個目なので(2, 2, 3)、subplot4は2行2列の4個目なので(2, 2, 4)となる。




グラフの作成

それでは実際にグラフを作成してみることにする。

作成するグラフのデータには、numpyで作成するランダムな値を使う。

#matplotlibとnumpyのインポート
import matplotlib.pyplot as plt 
import numpy as np

#figureの作成
fig = plt.figure()

#subplotの作成
#ax1〜ax4にsubplotを追加する
ax1 = fig.add_subplot(2, 2, 1) #1つ目のsubplot 2行2列の1つ目
ax2 = fig.add_subplot(2, 2, 2) #2つ目のsubplot 2行2列の2つ目
ax3 = fig.add_subplot(2, 2, 3) #3つ目のsubplot 2行2列の3つ目
ax4 = fig.add_subplot(2, 2, 4) #4つ目のsubplot 2行2列の4つ目

#1つ目のグラフ(折れ線グラフ)の作成
Y1 = np.random.randint(0, 100, 5) #棒グラフのデータを作成
ax1.plot(Y1) #ax1に棒グラフを指定
ax1.set_title("グラフ1") 

#2つ目のグラフ(棒グラフ)の作成
X1 = range(0, 5) #横軸の値
Y2 = np.random.randint(0, 100, 5) #グラフのデータ
ax2.bar(X1, Y2) #ax2に棒グラフを指定
ax2.set_title("グラフ2")

#3つ目のグラフ(横棒グラフ)の作成
X3 = range(0, 5) #横軸の値
Y3 = np.random.randint(0, 100, 5) #グラフのデータ
ax3.barh(X3, Y3) #ax3に横棒グラフを指定
ax3.set_title("グラフ3")

#4つ目のグラフ(散布図)の作成
X4 = np.random.randint(0, 100, 50) #xの値
Y4 = np.random.randint(0, 100, 50) #yの値
ax4.scatter(X4, Y4) #ax4に散布図を指定
ax4.set_title("グラフ4")

#レイアウトの設定
plt.tight_layout()

#グラフの表示
plt.show()

このコードを実行すると完成イメージのような2行2列で4種類のグラフが作成される。

ポイントは、コードの最後の方でレイアウトの設定をしていること。
plt.tight_layout()
この1行を記述しないと、2行目のグラフのタイトルが1行目のグラフと重なってしまい、見にくくなってしまうので注意が必要。




以上。

今回は、ここまで。

0 件のコメント :