忽略ggplot2 boxplot中的离群值

| 我如何忽略ggplot2 boxplot中的离群值?我不只是希望它们消失(即outlier.size = 0),而是希望它们被忽略,以便y轴缩放以显示第一/第三百分位数。我的异常值导致\“ box \”缩小到几乎只有一条线。有一些技巧可以解决这个问题吗? 编辑 这是一个例子:
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom=\"boxplot\")
    
已邀请:
这是使用boxplot.stats的解决方案
# create a dummy data frame with outliers
df = data.frame(y = c(-100, rnorm(100), 100))

# create boxplot that includes outliers
p0 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)))


# compute lower and upper whiskers
ylim1 = boxplot.stats(df$y)$stats[c(1, 5)]

# scale y limits based on ylim1
p1 = p0 + coord_cartesian(ylim = ylim1*1.05)
    
使用
geom_boxplot(outlier.shape = NA)
不显示异常值,使用ѭ3the更改轴限制。 一个例子。
n <- 1e4L
dfr <- data.frame(
  y = exp(rlnorm(n)),  #really right-skewed variable
  f = gl(2, n / 2)
)

p <- ggplot(dfr, aes(f, y)) + 
  geom_boxplot()
p   # big outlier causes quartiles to look too slim

p2 <- ggplot(dfr, aes(f, y)) + 
  geom_boxplot(outlier.shape = NA) +
  scale_y_continuous(limits = quantile(dfr$y, c(0.1, 0.9)))
p2  # no outliers plotted, range shifted
实际上,正如Ramnath在他的回答中所示(在评论中也是Andrie所示)一样,在通过ѭ5来计算统计量之后,裁剪比例尺会更有意义。
coord_cartesian(ylim = quantile(dfr$y, c(0.1, 0.9)))
(您可能仍然需要使用ѭ7来修复轴断裂。)     
我遇到了同样的问题,并使用ѭ8pre预先计算了Q1,Q2,中位数,ymin,ymax的值:
# Load package and generate data
library(ggplot2)
data <- rnorm(100)

# Compute boxplot statistics
stats <- boxplot.stats(data)$stats
df <- data.frame(x=\"label1\", ymin=stats[1], lower=stats[2], middle=stats[3], 
                 upper=stats[4], ymax=stats[5])

# Create plot
p <- ggplot(df, aes(x=x, lower=lower, upper=upper, middle=middle, ymin=ymin, 
                    ymax=ymax)) + 
    geom_boxplot(stat=\"identity\")
p
结果是没有异常值的箱线图。     
一种想法是通过两遍过程对数据进行分类处理: 进行第一遍,了解界限,例如给定百分位数的割,或高于平均值的N个标准差,或... 在第二遍中,将超出给定界限的值设置为该界限的值 我应该强调,这是一种老式的方法,应该由更现代的鲁棒技术主导,但是您仍然会遇到很多。     
geom_boxplot函数的\“ coef \”选项允许根据四分位间距更改离群截止值。该选项记录在stat_boxplot函数中。要停用异常值(换句话说,它们被视为常规数据),可以使用一个非常高的截止值来代替使用默认值1.5:
library(ggplot2)
# generate data with outliers:
df = data.frame(x=1, y = c(-10, rnorm(100), 10)) 
# generate plot with increased cutoff for outliers:
ggplot(df, aes(x, y)) + geom_boxplot(coef=1e30)
    
如果要强制晶须扩展到最大值和最小值,可以调整
coef
参数。
coef
的默认值为1.5(即晶须的默认长度为IQR的1.5倍)。
# Load package and create a dummy data frame with outliers 
#(using example from Ramnath\'s answer above)
library(ggplot2)
df = data.frame(y = c(-100, rnorm(100), 100))

# create boxplot that includes outliers
p0 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)))

# create boxplot where whiskers extend to max and min values
p1 = ggplot(df, aes(y = y)) + geom_boxplot(aes(x = factor(1)), coef = 500)
    
Ipaper :: geom_boxplot2就是您想要的。
# devtools::install_github(\'kongdd/Ipaper\')
library(Ipaper)
library(ggplot2)
p <- ggplot(mpg, aes(class, hwy))
p + geom_boxplot2(width = 0.8, width.errorbar = 0.5)
    

要回复问题请先登录注册