当用 pandas 绘制数据框的列时,例如
df.boxplot()
的自动调整yaxis
会导致情节中大量未使用的空间。我想知道这是否是因为数据框的点超过了箱线图须线(但由于某种原因,未显示异常值)。如果是这种情况,那么自动调整ylim
以使情节中没有太多空白空间的好方法是什么?
当用 pandas 绘制数据框的列时,例如
df.boxplot()
的自动调整yaxis
会导致情节中大量未使用的空间。我想知道这是否是因为数据框的点超过了箱线图须线(但由于某种原因,未显示异常值)。如果是这种情况,那么自动调整ylim
以使情节中没有太多空白空间的好方法是什么?
我认为 seaborn 风格和 matplotlib 绘制箱线图的方式的结合在这里隐藏了你的异常值。
如果我生成一些倾斜的数据
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)
基于 eumiro 在这篇 SO帖子中的回答(我只是将其扩展到熊猫数据框,您可以执行以下操作
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
是要忽略的标准偏差数。
编辑:
为什么胡须首先不包括最大异常值?
如Wikipedia上所述,有几种类型的箱线图。pandas
箱线图调用的matplotlib
箱线图。如果您查看此文档的参数whis
“将晶须的长度定义为内部四分位数范围的函数。因此它不会通过设计覆盖整个范围。