※この記事にはプロモーションが含まれています。

17. Matplotlibでグラフの描画

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

更新日:

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が発売中!
11月29日まで!Udemy「ブラックフライデー」シーズン最安値の大セール中!

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

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)

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

Matplotlibの日本語対応

Matplotlibでは、標準では日本語対応がされておらず、棒グラフや円グラフのタイトルやラベルは英語でしか表記できません。日本語を無理に表示しようとすると、文字化けが発生し、「□□□」のような文字が表示されるだけで、正しく表示できません。
 
以下の記事では、Python初心者でも簡単にできる日本語対応の仕方を解説していきます。

 
 
 
 

 
 
 
最後に...


Pythonの学習においては、実際に様々なプログラムを書いて試していくことが非常に重要です。Pythonについて、さらに詳しく学ばれたい方は、以下の私のUdemy講座をご検討いただければ幸いです。


Pythonを用いて世界中のWebサイトから自動的にデータ収集する方法を、基礎からていねいに学ぶことができます。Pythonを初めて学ばれた方も、最初に取り組みやすい内容になっています。


>> Pythonによるビジネスに役立つWebスクレイピング
発売数9,000本突破を記念して大セール中!期間限定になりますのでお早めに。
Pythonによるビジネスに役立つWebスクレイピング(BeautifulSoup、Selenium、Requests)講座の画面

既に9,000名以上の方に受講頂き、大変好評です。またコースに満足いただけない場合でも、30日返金保証があるので安心です。

期間限定の割引クーポンは、こちらから!
>> Pythonによるビジネスに役立つWebスクレイピング
   
   





-17. Matplotlibでグラフの描画

Copyright© ビジPy , 2024 All Rights Reserved.