pythonのMatplotlibで箱ひげ図を描く方法

Matplotlib

pythonのMatplotlibモジュールで箱ひげ図を描きたいけど如何したら良い知りたい方,そもそも箱ひげ図て何の役にに立つのと言った疑問に本記事では箱ひげ図の解説から,セリーグの平均打率データを使いながらMatplotlibで箱ひげ図を描く方法について解説していきます.

 スポンサーリンク

スポンサーリンク

箱ひげ図て何

箱ひげ図とは主にバラつきのあるデータ分布を箱とひげに表したグラフです.データのバラつきを視覚的に表現し比較するのに用います.収集したデータを正規分布に当てはめ、箱にデータの50%が存在するようにします.箱の下端Q1が25%,データの中央値Q2が50%,箱の上端Q3が75%とします.
ひげの長は四分位範囲(IQR)を上下に1.5倍をした範囲とし,これを超えると外れ値となります.外れ値は他の測定点のデータ分布と比べ大きく外れていることを示します.測定ミスや何かの異常があることが考えられます.

下図の箱ひげ図と正規分布の関係図を見れば、箱ひげ図でのデータ分布のイメージが解ると思います.

シンプルな箱ひげ図の作成

Matplotlibで箱ひげ図はAxes.boxplot()から作成できます.
2020年プロ野球セリーグについて規定打席の1/3を上回った選手の平均打率をチーム毎に箱ひげグラフで作成していきます.まずは、ジャイアンツ(G)の平均打率を描いてみます.作り方はax1.boxplot()にデータ配列(G)を渡します.

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)
G  =  [0.275, 0.284, 0.289, 0.274, 0.263, 0.297,
              0.270, 0.247, 0.247, 0.255, 0.267] #巨人(G)平均打率データ
ax1.set_title('Giants batting average') #タイトル
ax1.set_xticklabels(['Giants'])         #X軸目盛
ax1.set_ylabel("batting average")       #Y軸ラベル
ax1.boxplot(G)   #箱ひげの設定 ジャイアンツ(G)のデータからグラフを作成
plt.show()

複数の箱ひげ図の作成(セリーグ平均打率)

複数の箱ひげグラフを作成するには,Axes.boxplot()にデータの順番を記載した関数を渡します.
目盛ラベルも同じようにAxes.set_xticklabels()にラベル配列を記載した関数を渡します.
2020年プロ野球セリーグについて規定打席の1/3を上回った選手の平均打率のデータを関数(G,T,D,DB,C,S)の6チーム分作成しました.これをdata = (G,T,D,DB,C,S)としてまとめたものをax1.boxplot(data)に渡しています.

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(111)

G  =  [0.275, 0.284, 0.289, 0.274, 0.263, 0.297,
              0.270, 0.247, 0.247, 0.255, 0.267] #ジャイアンツ
T  =  [0.314, 0.284, 0.271, 0.269, 0.267, 0.266,
                     0.262, 0.258, 0.256, 0.247] #タイガース
D  =  [0.316, 0.247, 0.267, 0.257, 0.305, 0.267,
                     0.294, 0.246, 0.235, 0.200] #ドラゴンズ
DB =  [0.323, 0.252, 0.301, 0.328, 0.246, 0.266,
              0.212, 0.286, 0.281, 0.276, 0.308] #DNAベイスターズ
C  =  [0.300, 0.251, 0.279, 0.271, 0.277, 0.266,
                     0.304, 0.285, 0.266, 0.287, 0.259] #カープ
S  =  [0.307, 0.246, 0.317, 0.273, 0.254, 0.245,
                     0.245, 0.232, 0.279, 0.274, 0.215] #スワローズ

data = (G,T,D,DB,C,S)                 #複数のデータ配列
label = (["G","T","D","DB","C","S"])  #ラベルセット
ax1.set_title('Central League batting average') #タイトルラベル
ax1.set_xlabel("team")              #X軸ラベル
ax1.set_ylabel("batting average")   #Y軸ラベル
ax1.set_xticklabels(label)          #X軸目盛ラベル配列(label)に従う

ax1.boxplot(data)                   #箱ひげグラフを配列(data)に従って作成
plt.show()

タイガース(T)についてひげの上に〇印が見えるかと思います.これは外れ値です.タイガースの他の打者のデータが狭い範囲にあるためこのように認識されました.

トップページへ戻る

 

コメント

タイトルとURLをコピーしました