Barplot with Errorbars

Bar plots with error bars are very frequently used in the environmental sciences to represent the variation in a continuous variable within one or more categorical variables. These are not always straightforward to make with the base functions in R. This page introduces you to making these plots with the package ggplot2.

Before you get started, read the page on the basics of plotting with ggplot and install the package ggplot2.


In this examples, let’s use a data set that is already in R with the length and width of floral parts for three species of iris. First, load the data set:


To contrast a variable across species, we first need to summarise the data to obtain means and a measure of variation for each of the three species in the data set. There are several ways to do this in R, but we like the summarise and group_by functions in the package dplyr. See here for more details on using dplyr for summarising data.

The following code will make a new data frame with the summary data per species.


Iris_summary <- iris %>% # the names of the new data frame and the data frame to be summarised
  group_by(Species) %>% # the grouping variable
    mean_PL = mean(Petal.Length), # calculates the mean of each group
    sd_PL = sd(Petal.Length), # calculates the standard deviation of each group
    n_PL = n(), # calculates the sample size per group
    SE_PL = sd(Petal.Length) / sqrt(n())
  ) # calculates the standard error of each group

We can now make a bar plot of means vs species, with standard deviations or standard errors as the error bar. The following code uses the standard deviations.

IrisPlot <- ggplot(Iris_summary, aes(Species, mean_PL)) +
  geom_col() +
  geom_errorbar(aes(ymin = mean_PL - sd_PL, ymax = mean_PL + sd_PL), width = 0.2)

IrisPlot + labs(y = "Petal length (cm) +/- s.d.", x = "Species") + theme_classic()

geom_col uses the value of the y variable (mean_PL) as the height of the bars.

In the geom_errorbar code, ymin and ymax are the top and bottom of the error bars (defined here as mean +/- sd), and width defines how wide the error bars are.

###Further help

To further customise the aesthetics of the graph, including colour and formatting, see our other ggplot help pages:
* altering the overall appearance
* adding titles and axis names
* colours and symbols

Help on all the ggplot functions can be found at the The master ggplot help site.

A useful cheat sheet on commonly used functions can be downloaded here.

Chang, W (2012) R Graphics cookbook. O’Reilly Media. - a guide to ggplot with online help on making bar and line graphs with error bars here

Author: Alistair Poore (small edits by Will Cornwell)

Year: 2016

Last updated: Feb 2022