Matplotlib・Seabornの箱ひげ図でひげ・外れ値・キャップなどのプロパティを編集する方法
MatplotlibやSeabornで作成した箱ひげ図(ボックスプロット)では、ひげ(whiskers)、外れ値(fliers/outliers)、キャップ(caps)など、各要素のプロパティを自由に編集できます。この記事では、箱ひげ図の各要素のデータを取得して編集するための基本的な手順を解説します。
編集までの手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- Pandasを使ってデータフレームを作成します。
- データフレームの列から箱ひげ図を作成します。
- 箱ひげ図の外れ値(outliers)、箱(boxes)、中央値(medians)、ひげ(whiskers)のデータを取得します。
- 取得したすべてのデータを出力して確認します。
- show()メソッドを使って図を表示します。
コード例
import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(dict(age=[23, 45, 21, 15, 12]))
_, bp = pd.DataFrame.boxplot(df, return_type='both')
outliers = [flier.get_ydata() for flier in bp["fliers"]]
boxes = [box.get_ydata() for box in bp["boxes"]]
medians = [median.get_ydata() for median in bp["medians"]]
whiskers = [whiskers.get_ydata() for whiskers in bp["whiskers"]]
print("Outliers/Fliers: ", outliers)
print("Boxes: ", boxes)
print("Medians: ", medians)
print("Whiskers: ", whiskers)
plt.show()
出力結果
Outliers/Fliers: [array([45])] Boxes: [array([15., 15., 23., 23., 15.])] Medians: [array([21., 21.])] Whiskers: [array([15., 12.]), array([23., 23.])]
解説
ポイントは pd.DataFrame.boxplot(df, return_type='both') の指定です。return_type='both' を使うことで、描画されたグラフと、ひげ・箱・中央値・外れ値などの各要素(Line2Dオブジェクト)を格納した辞書の両方を受け取れます。
取得した各オブジェクトに対して get_ydata() を呼び出すと、対応する数値データ(y軸の値)にアクセスできます。上記の出力例では、年齢データ [23, 45, 21, 15, 12] のうち「45」が外れ値として検出され、箱の範囲が15〜23、中央値が21であることが確認できます。
さらに、これらのオブジェクトはMatplotlibのアーティストとして扱えるため、set_color() や set_linewidth() などを呼び出せば、ひげや外れ値マーカーの色・線幅・スタイルを後から自由にカスタマイズすることも可能です。
-
MatplotlibとSeabornのカウントプロットで表示するグループ数を制限する方法
Seabornのカウントプロット(countplot)で表示されるグループの数を制限したい場合、countplot()メソッドの引数で使用できる変数group_countを活用すると簡単に実現できます。手順図(figure)と2つのサブプロットを作成します。Pandasを使って、複数のキー(列)を持つデータフレームを作成します。グループ数を制限するための変数group_countを初期化します。countplot()メソッドを使用して、各カテゴリビンごとの観測値の数を棒グラフとして表示します。このとき、order引数にgroup_countを適用することで、表示するグループ数を制御します。サブ
-
MatplotlibでSeabornプロットの凡例(レジェンド)のフォントサイズを大きくする方法
Seabornプロットの凡例(レジェンド)のフォントサイズを大きくしたい場合は、fontsize変数を定義し、それをlegend()メソッドの引数として渡すことで実現できます。手順Pandasを使ってデータフレームを作成します。キーは「number」「count」「select」とします。Seabornのbarplot()メソッドを使って棒グラフを描画します。凡例のフォントサイズを大きくするための変数fontsizeを初期化します。legend()メソッドを使い、fontsizeを引数に指定して図上に凡例を配置します。図を表示するには、show()メソッドを使用します。サンプルコードimpor