使用pandas绘制数据框的列时,例如
df.boxplot()
yaxis
的自动调整可能会导致绘图中存在大量未使用的空间。我想知道这是否是因为数据框的点数超过了箱线图胡须(但由于某种原因,不显示异常值)。如果是这种情况,那么自动调整ylim
以便在情节中没有那么多空白空间的好方法是什么?
答案 0 :(得分:3)
我认为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.")
或者,您可以使用seaborn boxplot
函数,它具有相同的功能,但具有一些不错的美学效果:
sns.boxplot(x)
答案 1 :(得分:1)
以this 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
是要忽略的标准差的数量。
编辑:
为什么胡须首先不包括最大异常值?
Wikipedia中描述了几种类型的Boxplots。 pandas
框图调用matplotlib
的箱形图。如果您查看documentation for this参数whis
“将胡须的长度定义为内四分位数范围的函数。因此,它不会覆盖整个范围。