ggplot误差条位置多因素问题

5

我一直在尝试在一个类似于以下数据的多层直方图上绘制标准误差棒:

mth<-rep(c("June","July","August"),length.out=15)
yr<-rep(c("1999","2000","2005","2009","2010"),each=3)
X<-rnorm(15,mean=200,sd=100)
lng<-rep(c(30,31,31),length.out=15)
vrnc<-rnorm(15,mean=740,sd=300)
df<-data.frame(mth,yr,vrnc,lng,X)
dfi<-dim(df)[1]
for(i in 1:dfi){
df$X.se[i]<-sqrt(df$vrnc[i]/df$lng[i])
}

我尝试使用这个帖子中描述的stat_summary方法来放置误差线。我的stat_summary代码如下:

ggplot(df,aes(x=yr,y=X,fill=mth))+
    stat_summary(fun.y=mean, geom="bar",position=position_dodge(1)) + 
    stat_summary(fun.ymin=min,fun.ymax=max,geom="errorbar",
        color="grey40",position=position_dodge(1), width=.2) +
    geom_errorbar(data=df,aes(ymin=X-X.se,ymax=X+X.se,position="dodge",width=.2))+
    scale_fill_discrete("mth")

我还尝试了使用这段代码:

ggplot(df,aes(x=yr,y=X,fill=mth))+
    geom_bar(stat="identity",position="dodge")+
    geom_errorbar(data=df,aes(ymin=X-X.se,ymax=X+X.se,position="dodge",width=.2))

但结果总是显示误差条都在每年的中间位置。

enter image description here

我想知道我的错在哪里。每个错误线应该放在数据所引用的月/年的顶部。
1个回答

6

我最近需要做这个。 大致如下:

ggplot(df,aes(x=yr,y=X,fill=mth))+
  geom_bar(stat="identity", position = position_dodge()) +
  geom_errorbar(aes(ymin=X-X.se, ymax=X+X.se), position = position_dodge(.9), width=.2)

2
只需要稍微解释一下:误差线没有闪避的主要原因是position需要在aes()映射之外指定。 - Matt Parker
@RichAtMango:太棒了!非常感谢。 - slap-a-da-bias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接