【问题标题】:Change outlier calculation in Box plot by using ggplot In R使用 R 中的 ggplot 更改箱线图中的异常值计算
【发布时间】:2016-07-11 14:12:42
【问题描述】:

我正在尝试自定义箱线图,除了一点之外我非常成功。我无法理解的一点是我如何使用 stat_summary 来显示异常值。我在一个大图中有不同的箱线图,并且异常值不会显示在输出中。但是,如果我修改我的数据并且只向 R 提供一种类型的数据(仅适用于单箱线图),我的代码可以正常工作,并且我可以在输出中清楚地看到 ourliers。感谢您的帮助。

非常感谢,

f <- function(x) {r <- c(    quantile(x,probs=c(0.25))-(1.5*(quantile(x,probs=c(0.75))-quantile(x,probs=c(0.25))))     ,quantile(x, probs = c(0.25)), quantile(x, probs = c(0.5)), quantile(x, probs = c(0.75)),     quantile(x,probs=c(0.75))+(1.5*(quantile(x,probs=c(0.75))-quantile(x,probs=c(0.25)))) );names(r) <- c('ymin', 'lower', 'middle', 'upper', 'ymax'); r}
o <-function(x) { print(x); if (length(x) > 7) { pp = subset(x, x < (quantile(x, probs = c(0.25)) - (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))) | x > (quantile(x, probs = c(0.75)) + (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25)))))); return (pp)} else { return (NA)} }

dt=read.table("C:/...../test.txt",header=TRUE,sep=",")
data<-data.frame(x=dt$x,day=dt$day)
dev.new();ggplot(data, aes(x,day)) +   stat_summary(fun.data=f, geom='boxplot')+stat_summary(fun.data =o, geom='point', col='red')#+  stat_summary(fun.y = o2, geom='point', col='red')

【问题讨论】:

    标签: r plot ggplot2 boxplot outliers


    【解决方案1】:

    关键是将所有数据保留在同一列中,并添加标签列以区分变量。如果您使用自定义函数来检测数据框中的异常值,则可以完全取消 stat_summary 函数。

    改编自Labeling Outliers of Boxplots in R

    library(ggplot2)
    library(data.table)
    
    # Generate sample
    set.seed(123)
    n <- 500
    dat <- data.table(group=c(rep("A", n/2) , rep("B", n/2)), value=rnorm(n))
    

    请注意我们的示例数据如何在同一列中包含变量 A 和 B,仅通过组标识符进行区分。

    # Create outlier function
    check_outlier <- function(v, coef=1.5){
      quantiles <- quantile(v, probs=c(0.25,0.75) )
      IQR <- quantiles[2] - quantiles[1]
      res <- (v < ( quantiles[1]- coef*IQR )) | (v > ( quantiles[2]+ coef*IQR ))
      return(res)
    }
    
    # Apply with data.table "by" method
    dat[, outlier:=check_outlier(value), by=group]
    

    这个函数并不常见,它是data.table包的一部分,但主要是在异常值标签为TRUE的数据框中附加一列。

    # Plot
    ggplot(dat, aes(x=group,y=value)) + 
      geom_boxplot()
    

    从那里自定义您的情节。

    【讨论】:

    • 嗨,克里斯,感谢您的回答。赞赏。可惜了,我才看到,不是我没收到通知的原因。
    • @mohsenhs 没问题,很乐意提供帮助。
    【解决方案2】:

    感谢克里斯的帮助。

    问题与我的 o 函数有关,

     o <-function(x)  {    pp= subset(x, x <(quantile(x, probs = c(0.25)) - (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))) | x > (quantile(x, probs = c(0.75)) + (1.5 * (quantile(x, probs = c(0.75)) - quantile(x, probs = c(0.25))))));if(length(pp)<1){pp=c(1);return(pp)}else { return (NA)}}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 2014-08-21
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 1970-01-01
      • 2013-02-17
      相关资源
      最近更新 更多