発売数9,000本突破を記念して、今だけ期間限定で87%オフの大セール中!!!
Matplotlibで複数のグラフ(棒グラフ、円グラフなど)を並べて表示(subplotの使い方)
Matplotlibでは、グラフは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()
グラフ自体は前の章で説明したのと同じものを関数draw_barchart、draw_piechartにまとめただけですので、複数のグラフを並べて表示しているコードに注目し解説します。
(1)のfigureでは、複数のグラフを描画する領域全体のサイズを指定しています。
(2)のsubplots_adjustでは、隣り合う各グラフの横、上下の間隔を指定します。
wspaceで指定するのが横の間隔で、hspaceで指定するのが上下の間隔になります。ここでは横に2つのグラフを並べて表示するだけですので、hspaceは指定する必要がありません。
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初心者でも簡単にできる日本語対応の仕方を解説していきます。