パンダを使用してデータフレームの列をプロットする場合、たとえば
df.boxplot()
の自動調整によりyaxis
、プロットに大量の未使用スペースが生じる可能性があります。これは、データフレームに箱ひげ図のひげを超えるポイントがあるためでしょうか (ただし、何らかの理由で外れ値が表示されません)。その場合、ylim
プロットに空きスペースがあまりないように自動的に調整するにはどうすればよいでしょうか?
パンダを使用してデータフレームの列をプロットする場合、たとえば
df.boxplot()
の自動調整によりyaxis
、プロットに大量の未使用スペースが生じる可能性があります。これは、データフレームに箱ひげ図のひげを超えるポイントがあるためでしょうか (ただし、何らかの理由で外れ値が表示されません)。その場合、ylim
プロットに空きスペースがあまりないように自動的に調整するにはどうすればよいでしょうか?
seaborn スタイルと matplotlib が boxplot を描画する方法の組み合わせが、外れ値をここに隠していると思います。
歪んだデータを生成した場合
import seaborn as sns
import pandas as pd
import numpy as np
x = pd.DataFrame(np.random.lognormal(size=(100, 6)),
columns=list("abcdef"))
そしてboxplot
、データフレームでメソッドを使用すると、似たようなものが見えます
x.boxplot()
しかし、外れ値をプロットするために使用される記号を変更すると、次のようになります。
x.boxplot(sym="k.")
別の方法として、seabornboxplot
関数を使用することもできます。これは同じことを行いますが、美学が優れています。
sns.boxplot(x)
この SO投稿の eumiro の回答に基づいて構築します(次のようにできる pandas データ フレームに拡張するだけです)。
import numpy as np
import pandas as pd
def reject_outliers(df, col_name, m=2):
""" Returns data frame without outliers in the col_name column """
return df[np.abs(df[col_name] - df[col_name].mean()) < m * df[col_name].std()]
# Create fake data
N = 10
df = pd.DataFrame(dict(a=np.random.rand(N), b=np.random.rand(N)))
df = df.append(dict(a=0.1, b=10), ignore_index=True)
# Strip outliers from the "b" column
df = reject_outliers(df, "b")
bp = df.boxplot()
引数m
は、無視する標準偏差の数です。
編集:
そもそもウィスカーに最大の外れ値が含まれていないのはなぜですか?
ウィキペディアで説明されているように、箱ひげ図にはいくつかの種類があります。boxplot はのpandas
boxplot を呼び出しますmatplotlib
。これに関するドキュメントを見ると、引数whis
「ウィスカーの長さを内側の四分位範囲の関数として定義します。したがって、設計上、範囲全体をカバーすることはありません.