1

当用 pandas 绘制数据框的列时,例如

  df.boxplot()

的自动调整yaxis会导致情节中大量未使用的空间。我想知道这是否是因为数据框的点超过了箱线图须线(但由于某种原因,未显示异常值)。如果是这种情况,那么自动调整ylim 以使情节中没有太多空白空间的好方法是什么?

在此处输入图像描述

4

2 回答 2

4

我认为 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)

在此处输入图像描述

于 2014-05-07T21:29:04.327 回答
1

基于 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“将晶须的长度定义为内部四分位数范围的函数。因此它不会通过设计覆盖整个范围。

于 2014-05-07T14:38:59.250 回答