今回の講座ではmatplotlibで箱ひげ図を描画する方法を紹介します。
とくに
- matplotlibでどうやって描画するの?
- 外れ値の範囲は変更できる?
このような疑問を持っている人にうってつけの内容になっています。
箱ひげ図は、散布図や棒グラフなどと比べると使用機会は少ないと思いますが、データの分布を把握するのに役立ちます。
引数の指定も多く、細かい設定が出来るようになっていますが、全て覚える必要はないです。
この講座では重要な部分に絞って解説します。
箱ひげ図とは何か?

箱ひげ図とは、↑のような図のことです。
データの分布を箱とひげで表しています。
つまり、データの分布がどのように散らばっているのか?その点を理解しやすくしてくれるのが箱ひげ図です。
箱は、第1四分位数、第2四分位数(中央値)、第3四分位数を表しています。
ひげの下端が最小値を表しており、ひげの上端が外れ値を除いた最大値を表しています。
今回は簡単に箱ひげ図の説明をしましたが、もっと詳しく知りたいという方は下記の記事を参照してください。

plt.boxplot()の引数
matplotlibで箱ひげ図をプロットするにはplt.boxplot()を使います。
引数に指定できるものは非常に多いですが、全てを使うこともないと思いますので、主要なもに絞って解説します。
boxplot()の引数
boxplot(x, sym=None, vert=None, whis=None, meanline=None, showmeans=None, medianprops=None, meanprops=None, data=None)
引数 | 説明 | 詳細 |
X | x軸を指定 |
|
sym | 外れ値のオプション |
|
vert | 箱ひげ図を水平方向に表示 |
|
whis | 外れ値の範囲を指定 |
|
showmeans | 平均値を記号で表示 |
|
meanline | 平均値を線で表示 |
|
medianprops | 中央値の色やスタイルを変更 |
|
meanprops | 平均値の色やスタイルを変更 |
|
主要な引数としてはここら辺ですね!
では実際に使い方を見ていきましょう。
plt.boxplot()で箱ひげ図をプロットしよう
まずはシンプルな箱ひげ図をプロットしてみましょう。
適当なデータを作成し、タイトルをつけてプロットします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import matplotlib.pyplot as plt import japanize_matplotlib # データの作成 x = [1, 2, 3, 4, 5, 6, 7, 8, 12, 16] # 箱ひげ図の描画 plt.boxplot(x) # タイトルの追加 plt.title("箱ひげ図") # 表示 plt.show() |
サクッと作成することができましたね。
y軸で16にある〇は外れ地を表しています。また箱ひげ図のオレンジの線は中央値を示しています。(平均値ではありません。)
外れ値のオプション(sym/whis)
続いて外れ値の表示方法を変更してみましょう!
引数のsymとwhisで設定することができます。
まずは外れ値の色とスタイルを変更してみましょう!
赤色のダイヤモンド形にしてみますのでsymを指定します。
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, sym='rD') |
sym=’rD’と色・形の順で指定することで変更することができます。
また、外れ値を表示したくない時にはsym=”(空文字)で指定する事で消すことができます。
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, sym='') |
外れ値の範囲指定(whis)
続いて何かと使う場面のある、外れ値の範囲指定です。
whis引数に数字を指定する事で変更することがでます。
ちなみにデフォルトは1.5です。
数値指定を0.9にしてみましょう。
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, whis=0.9) |
外れ値の範囲を変更することができました。
箱ひげ図を水平に表示(vert)
そんなに使う機会は多くはありませんが、箱ひげ図の表示を水平方向にすることもできます。
vert=0 or Falseとすることで可能です。
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, vert=False) |
平均値を表示する
boxplot()は基本的には中央値が表示されます。
しかし、平均値を表示したいって時もありますよね?
そんな時はshowmeansやmeanlineを使うことで表示できます。
showmeansで平均値を記号で表示
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, showmeans=True) |
平均値を記号でplotすることができました。
平均値と中央値の差が大きい時などに表示したいですね。
では続いて平均値を記号ではなく線で表示してみましょう。
個人的にはこちらの方が使う機会が多いです。
meanlineで平均値を線で表示
1 2 |
# 箱ひげ図の描画 plt.boxplot(x, showmeans=True, meanline=True) |
この時注意点としては、showmeanに加えてmeanlen=Trueとすることです。
meanlineだけ指定しても平均値は表示されません。
中央値の線をカスタマイズ(medianprops)
中央値の線をカスタマイズしたい時はmedianpropsを使います。
今までとは違い辞書で渡してあげます。
指定方法としては、
- color:色
- linewidth:線の太さ
- linestyle:線のスタイル
このようにして指定します。
1 2 3 4 |
# 箱ひげ図の描画 plt.boxplot(x, medianprops={'color':'red', 'linewidth':'4', 'linestyle':':'}) |
もちろん全てを指定する必要はなく、色を変えたいだけならcolorだけ指定すれば大丈夫です。
また、linestyleで変更できる線のスタイルは以下の通りです。
'-'
:実線'--'
:破線'-.'
:点線':'
:ダッシュ線'None'
:線なし'solid'
:実線'dashed'
:破線'dotted'
:点線'dashdot'
:ダッシュ線
中央値を消して平均値だけを表示したい時はNoneで指定してあげましょう。
平均値の線をカスタマイズ(meanprops)
平均値の線をカスタマイズする時はmeanpropsを使います。
コチラもmedianpropsと同じく辞書で渡してあげます。
指定方法も一緒です。
注意点としては、showmeansとmeanlineをTrueにしないといけません。
1 2 3 4 5 6 |
# 箱ひげ図の描画 plt.boxplot(x, showmeans=True, meanline=True, meanprops={'color':'r', 'linewidth':2, 'linestyle':'--'}) |
boxplot()まとめ
いかがでしたでしょうか?
boxplot()の使い方が分かったでしょうか?
本当はもっと細かいカスタマイズをすることも出来るのですが、今回の内容だけでも実際の現場では十分だと思います。
どんどん手を動かして身につけましょう~!