2015-08-14 11 views
5

Ho cercato di tracciare barre di errore standard mediante un istogramma multilivello di dati che è molto simile a quanto segue:ggplot posizione errorbar problemi multifattoriali

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

Ho provato mettendo barre di errore utilizzando la metodo stat_summary descritto in this thread. Il mio codice con stat_summary simile a questo:

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

Ho provato anche utilizzando questo codice:

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

ma il risultato viene sempre fuori con le barre di errore tutto nel mezzo di ogni anno.

enter image description here

Mi piacerebbe sapere che cosa sto facendo male. ogni barra di errore dovrebbe essere in cima al mese/anno a cui si fa riferimento nei dati.

risposta

6

ha dovuto farlo di recente. qualcosa di simile:

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

Solo un po 'di ulteriori spiegazioni: la ragione principale per i errorbars non erano schivare è che 'position' deve essere specificata * * al di fuori dei' aes() 'mappatura. –

+0

@RichAtMango: Bingo! Grazie mille. –