Python
 Computer >> コンピューター >  >> プログラミング >> Python

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() などを呼び出せば、ひげや外れ値マーカーの色・線幅・スタイルを後から自由にカスタマイズすることも可能です。

  1. MatplotlibとSeabornのカウントプロットで表示するグループ数を制限する方法

    Seabornのカウントプロット(countplot)で表示されるグループの数を制限したい場合、countplot()メソッドの引数で使用できる変数group_countを活用すると簡単に実現できます。手順図(figure)と2つのサブプロットを作成します。Pandasを使って、複数のキー(列)を持つデータフレームを作成します。グループ数を制限するための変数group_countを初期化します。countplot()メソッドを使用して、各カテゴリビンごとの観測値の数を棒グラフとして表示します。このとき、order引数にgroup_countを適用することで、表示するグループ数を制御します。サブ

  2. MatplotlibでSeabornプロットの凡例(レジェンド)のフォントサイズを大きくする方法

    Seabornプロットの凡例(レジェンド)のフォントサイズを大きくしたい場合は、fontsize変数を定義し、それをlegend()メソッドの引数として渡すことで実現できます。手順Pandasを使ってデータフレームを作成します。キーは「number」「count」「select」とします。Seabornのbarplot()メソッドを使って棒グラフを描画します。凡例のフォントサイズを大きくするための変数fontsizeを初期化します。legend()メソッドを使い、fontsizeを引数に指定して図上に凡例を配置します。図を表示するには、show()メソッドを使用します。サンプルコードimpor