2015-08-14 1 views
5

J'ai essayé de tracer des barres d'erreur standard sur un histogramme à plusieurs niveaux de données qui est très similaire à ce qui suit:ggplot position errorbar problèmes multifactoriels

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]) 
} 

J'ai essayé de placer les barres d'erreur en utilisant le La méthode stat_summary décrite dans this thread. Mon code avec stat_summary ressemble à ceci:

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

J'ai aussi essayé d'utiliser ce code:

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

mais le résultat est toujours avec les barres d'erreur tout au milieu de chaque année.

enter image description here

Je voudrais savoir ce que je fais mal. chaque barre d'erreur doit être au dessus du mois/année référencé dans les données.

Répondre

6

a dû le faire récemment. quelque chose comme:

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

Juste un peu d'explication supplémentaire: la principale raison pour laquelle les errorbars ne sont pas en esquivant est que 'position' doit être spécifié * extérieur * des' cartographie aes ('). –

+0

@RichAtMango: Bingo! Merci beaucoup. –