17. Matplotlibでグラフの描画

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

更新日:

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が新発売!今なら期間限定で89%オフ!!!

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)

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

動画教材紹介私(清水 義孝)が作成したコース「Pythonによるビジネスに役立つWebスクレイピング」(Udemyへのリンク)が新発売!今なら期間限定で89%オフ!!!

Matplotlibの日本語対応

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

 
 
 
 






まとめ記事

1

Python3におけるWEBスクレイピングのやり方について初心者向けに解説した記事です。   Requests、Beautiful Soup、Selenium、Pandas、newspape ...

2

Pythonの基本的なトピックについて、チュートリアル形式で初心者向けに解説した記事です。プログラミング未経験者や初心者でもわかりやすいよう、丁寧に解説しています。   Pythonでデータ ...

3

Pandas(パンダス)とは、データを効率的に扱うために開発されたPythonのライブラリの1つで、データの取り込みや加工・集計、分析処理に利用します。   Pandasには2つの主要なデー ...

4

データ分析、機械学習、ディープラーニングにはグラフの描画による可視化は不可欠です。データは、加工前の状態ではただの数字の羅列でしかなく、一目で必要な情報が伝わるものではありません。それを集計しグラフに ...

5

NumPy(ナンパイ)は、数値計算を効率的に行うための拡張ライブラリです。ベクトルや行列などを効率的に数値計算するための数学関数ライブラリを提供します。NumPyを使うことにより、数値計算をより早く、 ...

-17. Matplotlibでグラフの描画

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