我有以下可重复的代码,它给我一个带有抖动点(标称x轴和另一个分组因子)的方格图:
ggplot(mtcars,aes(as.factor(cyl),disp))+
geom_jitter(aes(color=as.factor(am)),position=position_jitterdodge(dodge.width=0.88),cex=.8)+
geom_boxplot(aes(fill=as.factor(am)),width=1,outlier.shape=NA,position=position_dodge(width=.88))+
scale_fill_manual(values=c(NA,NA))我想在盒图中添加胡须,但我知道的唯一方法是使用stat_boxplot,它将一个错误条直接放在盒图的IQR范围内,而且它看起来很不吸引人:
ggplot(mtcars,aes(as.factor(cyl),disp))+
geom_jitter(aes(color=as.factor(am)),position=position_jitterdodge(dodge.width=0.88),cex=.8)+
stat_boxplot(geom ='errorbar',position=position_dodge(width=.88),aes(fill=as.factor(am))) +
geom_boxplot(aes(fill=as.factor(am)),width=1,outlier.shape=NA,position=position_dodge(width=.88))+
scale_fill_manual(values=c(NA,NA))我试图通过为上、下胡须编写自己的代码,然后使用状态摘要将我所需要的晶须行放在下面这样的位置来完成一项工作:
upper_whisker<-function(x) {
work<-quantile(x,na.rm=T,names=F)
obs<-max(x[x<=work[4]],na.rm=T)
whisker<-obs+1.5*IQR(x,na.rm=T)
return(whisker)
}
lower_whisker<-function(x) {
work<-quantile(x,na.rm=T,names=F)
obs<-min(x[x>=work[2]],na.rm=T)
whisker<-obs-1.5*IQR(x,na.rm=T)
return(whisker)
}
ggplot(mtcars,aes(as.factor(cyl),disp))+
geom_jitter(aes(color=as.factor(am)),position=position_jitterdodge(dodge.width=0.88),cex=.8)+
#stat_boxplot(geom ='errorbar',position=position_dodge(width=.88),aes(fill=as.factor(am))) +
stat_summary(aes(group=as.factor(am)),fun.y=upper_whisker,fun.ymin=upper_whisker,fun.ymax=upper_whisker,geom="errorbar",color="black",width=0.5,size=0.4,position=position_dodge(width=0.88))+
stat_summary(aes(group=as.factor(am)),fun.y=lower_whisker,fun.ymin=lower_whisker,fun.ymax=lower_whisker,geom="errorbar",color="black",width=0.5,size=0.4,position=position_dodge(width=0.88))+
geom_boxplot(aes(fill=as.factor(am)),width=1,outlier.shape=NA,position=position_dodge(width=.88))+
scale_fill_manual(values=c(NA,NA))但是正如你所看到的,胡须不在正确的位置,所以我肯定做错了配方(我在这里找到了配方:https://www.r-bloggers.com/whisker-of-boxplot/)。
如果有人能告诉我如何正确地做配方,或者他们对如何用我需要的方法做胡须有更好的想法,我将非常感激。
发布于 2018-12-07 11:00:00
在这一行:obs<-min(x[x>=work[2]],na.rm=T)中,取x的最小值,其中x大于1Q (也就是1Q)。这不是你想做的。
将您的胡须功能替换为:
编辑18/12/09 -使用R boxplot获取坐标
upper_whisker<-function(x) {
box_stats <- boxplot(x)$stats[5]
return(box_stats)
}
lower_whisker<-function(x) {
box_stats <- boxplot(x)$stats[1]
return(box_stats)
}https://stackoverflow.com/questions/53667662
复制相似问题