通过在R中使用ggplot更改方框图中的异常值计算

通过在R中使用ggplot更改方框图中的异常值计算,r,plot,ggplot2,boxplot,outliers,R,Plot,Ggplot2,Boxplot,Outliers,我正在尝试定制boxplot,除了一点之外,我非常成功。我无法理解的一点是,我如何使用stat_summary来显示异常值。我在一个大图中有不同的方框图,输出上没有显示异常值。但是,如果我修改数据,只向R输入一种类型的数据(仅适用于单方框图),我的代码工作正常,我可以在输出中清楚地看到我们的代码。谢谢你的帮助 非常感谢, f <- function(x) {r <- c( quantile(x,probs=c(0.25))-(1.5*(quantile(x,probs=c(0.

我正在尝试定制boxplot,除了一点之外,我非常成功。我无法理解的一点是,我如何使用stat_summary来显示异常值。我在一个大图中有不同的方框图,输出上没有显示异常值。但是,如果我修改数据,只向R输入一种类型的数据(仅适用于单方框图),我的代码工作正常,我可以在输出中清楚地看到我们的代码。谢谢你的帮助

非常感谢,

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')

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

改编自


从那里定制您的绘图。

感谢克里斯的帮助

问题与我的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)}}

o嗨,克里斯,谢谢你的回答。谢谢。真遗憾,我只是看到了,我不知道为什么我没有收到通知。@mohsenhs没问题,很高兴能帮上忙。
# 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]
# Plot
ggplot(dat, aes(x=group,y=value)) + 
  geom_boxplot()
 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)}}