首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:带有抖动点和胡须的框图,但没有错误条通过盒图的IQR

ggplot2:带有抖动点和胡须的框图,但没有错误条通过盒图的IQR
EN

Stack Overflow用户
提问于 2018-12-07 10:28:12
回答 1查看 270关注 0票数 0

我有以下可重复的代码,它给我一个带有抖动点(标称x轴和另一个分组因子)的方格图:

代码语言:javascript
复制
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范围内,而且它看起来很不吸引人:

代码语言:javascript
复制
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))

第二个例子

我试图通过为上、下胡须编写自己的代码,然后使用状态摘要将我所需要的晶须行放在下面这样的位置来完成一项工作:

代码语言:javascript
复制
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/)。

如果有人能告诉我如何正确地做配方,或者他们对如何用我需要的方法做胡须有更好的想法,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-07 11:00:00

在这一行:obs<-min(x[x>=work[2]],na.rm=T)中,取x的最小值,其中x大于1Q (也就是1Q)。这不是你想做的。

将您的胡须功能替换为:

编辑18/12/09 -使用R boxplot获取坐标

代码语言:javascript
复制
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)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53667662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档