17. Matplotlibでグラフの描画

Matplotlibで複数のグラフを並べて描画 (棒・円・折れ線グラフ、散布図など)

更新日:

Matplotlibで複数のグラフ(棒グラフ、円グラフなど)を並べて表示

Matplotlibでは、グラフは1つずつ表示するだけでなく、複数のグラフを並べて表示することもできます。

以下の章で作成しました製品毎の売り上げを示す棒グラフと、その構成比を示す円グラフを並べて表示してみましょう。



プログラムは次のようになります。

In [1]: 
import numpy as np
import matplotlib.pyplot as plt
 
def draw_barchart(x, y):
       """ 棒グラフを表示する関数
       引数:
       x -- x軸の値
       y -- y軸の値
       """
       # グラフの装飾
       plt.title("Sales by Product (m$)",
              fontsize = 26) # タイトル
       plt.xlabel("Product", fontsize = 26) # x軸ラベル
       plt.ylabel("Sales", fontsize = 26) # y軸ラベル
       plt.grid(True) # 目盛線の表示
       plt.tick_params(labelsize=26) # 目盛線のラベルサイズ
 
       # グラフの描画
       plt.bar(x, y, tick_label=x,
              align="center", color = "c") # 棒グラフの描画
 
def draw_piechart(x, y, c):
       """ 円グラフを表示する関数
       引数:
       x -- x軸の値
       y -- y軸の値
       c -- 指定色
       """
       # グラフの装飾
       plt.title("Sales by Product",
              fontsize = 26) # タイトル
       plt.rcParams['font.size'] = 26.0 # ラベルのフォント
 
       # グラフの描画
       plt.pie(y, labels=x, counterclock=True,
              autopct="%1.1f%%", colors=c) # 円グラフの描画
 
# データ準備
product_nm = np.array(["Cooktops", "Dryers", "Ranges",
              "TV", "Washers"]) # 製品名の格納
sales = np.array([124, 60, 70, 133, 12]) # 売上の格納
pie_colors = ["r", "c", "b", "m", "y"] # 製品毎の色指定
 
# グラフの描画
plt.figure(figsize=(25, 10)) # (1)描画領域を指定
plt.subplots_adjust(wspace=0.2, hspace=0) # (2)間隔指定
 
plt.subplot(1, 2, 1) # (3)グラフ描画位置の指定
draw_barchart(product_nm, sales)
 
plt.subplot(1, 2, 2) # (4)グラフ描画位置の指定
draw_piechart(product_nm, sales, pie_colors)
plt.show()

 

Out:

 

グラフ自体は前の章で説明したのと同じものを関数draw_barchart、draw_piechartにまとめただけですので、複数のグラフを並べて表示しているコードに注目し解説します。

plt.figure(figsize=(25, 10)) # (1)描画領域を指定

(1)のfigureでは、複数のグラフを描画する領域全体のサイズを指定しています。
 
 

plt.subplots_adjust(wspace=0.2, hspace=0) # (2)間隔指定

(2)のsubplots_adjustでは、隣り合う各グラフの横、上下の間隔を指定します。

wspaceで指定するのが横の間隔で、hspaceで指定するのが上下の間隔になります。ここでは横に2つのグラフを並べて表示するだけですので、hspaceは指定する必要がありません。
 
 

plt.subplot(1, 2, 1) # (3)グラフ描画位置の指定
draw_barchart(product_nm, sales)
 
plt.subplot(1, 2, 2) # (4)グラフ描画位置の指定
draw_piechart(product_nm, sales, pie_colors)

(3)、(4) のsubplotでは、グラフの描画する位置を指定しています。

plt.subplot(行数, 列数, 何番目のマスに描画するか)

全体を縦に行数分、横に列数分の分割をして、何番目のマスに描画するのかを指定します。

ここでは1行、2列に分割していますので、(3)で1番目のマスを指定して、直後のdraw_barchart関数で棒グラフを表示し、(4)で2番目のマスを指定して、draw_piechart関数で円グラフを表示しています。

何番目のマスにグラフを表示するのかは、上の列の左から順に数えていきますので、2行、3列で6分割した場合、plt.subplotへの引数は以下のようになります。

plt.subplot(2, 3, 1)plt.subplot(2, 3, 2)plt.subplot(2, 3, 3)
plt.subplot(2, 3, 4)plt.subplot(2, 3, 4)plt.subplot(2, 3, 4)

 
今回は、棒グラフと円グラフを並べて表示しましたが、折れ線グラフや散布図の場合も同様の方法で並べて表示することができます。
 
 
著書の紹介です。


 

-17. Matplotlibでグラフの描画

Copyright© AI-interのPython3入門 , 2019 All Rights Reserved.