rggplot2

add an the error bar to bar plot in ggplot


I want to make a barplot with sd in ggplot. The data file is:

mtc<-mtcars
head(mtc)

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

I calculate mean and sd for the variable wt using tapply

meanwt=tapply(mtc$wt, mtc$gear, mean)
sd=tapply(mtc$wt, mtc$gear, sd)

I create the ggplot with the error bars

ggplot(mtc, aes(x=gear, y=wt, fill=vs)) + 
  geom_bar(position=position_dodge(), stat="identity") +
  geom_errorbar(aes(ymin=meanwt-sd, ymax=meanwt+sd),
                width=.2, position=position_dodge(.9))

I get this error

Error: Aesthetics must either be length one, or the same length as the dataProblems:meanwt - sd, meanwt + sd

Solution

  • I have found the problem, thank you!

    meanwt<-tapply(mtc$wt , list(mtc$gear, mtc$vs), mean, na.rm=TRUE)
    sd=tapply(mtc$wt , list(mtc$gear, mtc$vs), sd, na.rm=TRUE)