0
votes

I recently tried to add error bars to a bar plot I've created in ggplot in R. However, when I looked up geom_errorbar it appears that the only documented way to do so was to create another data frame that holds the ymin and ymax of each bar, and plot the bar plot using that stat='identity' property, which seems very cumbersome.

For instance, this is the example that appears in geom_errorbar help page:

df <- data.frame(
  trt = factor(c(1, 1, 2, 2)),
  resp = c(1, 5, 3, 4),
  group = factor(c(1, 2, 1, 2)),
  se = c(0.1, 0.3, 0.3, 0.2)
)
df2 <- df[c(1,3),]

# Define the top and bottom of the errorbars
limits <- aes(ymax = resp + se, ymin=resp - se)

p <- ggplot(df, aes(fill=group, y=resp, x=trt))
p + geom_bar(position="dodge", stat="identity")

# Because the bars and errorbars have different widths
# we need to specify how wide the objects we are dodging are
dodge <- position_dodge(width=0.9)
p + geom_bar(position=dodge) + geom_errorbar(limits, position=dodge, width=0.25)

Isn't there a better way to do it without having to use stat='identity' plotting?

1
What's your actual question here? What problems are you running into trying to apply this to your own data?Marius

1 Answers

2
votes

There's a much easier way to plot errorbars using geom_errobars that for some reason is not very documented. Basically you just have to use the stat='summary' to the geom_errorbar object.

ggplot(data=mtcars, aes(x=gear, y=hp)) + geom_bar(stat='summary') + geom_errorbar(stat='summary', width=.2)

This is true, if you only want to use the errorbar to describe standard deviation from both sides of the bar (you might want to use a different measure, like confidence interval, etc.)