# Draw Boxplot with Means in R (2 Examples)

In this R tutorial youâ€™ll learn how to draw a box-whisker-plot with mean values.

The table of content is structured as follows:

Letâ€™s dive into it.

## Creation of Exemplifying Data

Have a look at the following example data:

```set.seed(2967358)                                          # Create example data
data <- data.frame(values = rnorm(100),
group = LETTERS[1:4])
#       values group
# 1  0.5949582     A
# 2  0.9930561     B
# 3 -0.0228722     C
# 4  0.1745861     D
# 5  0.9405201     A
# 6 -1.1648994     B```

The previous output of the RStudio console visualizes that our example data has two columns. The variable values contains numeric data and the variable group consists of a group indicator.

## Example 1: Drawing Boxplot with Mean Values Using Base R

In Example 1, Iâ€™ll explain how to draw a boxplot with means using the basic features of the R programming language.

First, we have to apply the aggregate function to calculate mean values by group:

```data_means <- aggregate(data\$values,                       # Means by group
list(data\$group),
mean)
data_means                                                 # Print means by group
#   Group.1           x
# 1       A  0.17191346
# 2       B -0.06744831
# 3       C -0.23547290
# 4       D  0.35031848```

Now, we can apply the boxplot, points, and text functions to draw a boxplot with mean values in Base R:

```boxplot(data\$values ~ data\$group)                          # Draw boxplot in Base R
points(x = 1:nrow(data_means),                             # Add points to plot
y = data_means\$x,
col = "red",
pch = 16)
text(x = 1:nrow(data_means),                               # Add text to plot
y = data_means\$x - 0.15,
labels = paste("Mean:", round(data_means\$x, 1)),
col = "red")```

Figure 1 shows the output of the previous R code â€“ A box-and-whisker plot with mean values and text.

## Example 2: Drawing Boxplot with Mean Values Using ggplot2 Package

In Example 2, Iâ€™ll illustrate how to use the functions of the ggplot2 package to add mean values to a boxplot in R.

We first need to install and load the ggplot2 package, if we want to use the corresponding functions:

```install.packages("ggplot2")                                # Install & load ggplot2 package
library("ggplot2")```

Now, we can use the geom_boxplot and stat_summary functions to draw our boxplots with means:

```ggplot(data, aes(x = group, y = values)) +                 # Draw ggplot2 boxplot
geom_boxplot() +
stat_summary(fun = mean, geom = "point", col = "red") +  # Add points to plot
stat_summary(fun = mean, geom = "text", col = "red",     # Add text to plot
vjust = 1.5, aes(label = paste("Mean:", round(..y.., digits = 1))))```

As shown in Figure 2, we have created a ggplot2 boxplot with mean values with the previously shown R code.

## Video & Further Resources

I have recently released a video on my YouTube channel, which explains the R codes of the present article. You can find the video below.

Furthermore, you may want to have a look at the other tutorials on this website. Some related articles about boxplots and other graphics in R can be found below:

On this page you learned how to create a boxplot with means in R. In case you have additional questions, donâ€™t hesitate to let me know in the comments. Furthermore, donâ€™t forget to subscribe to my email newsletter in order to get updates on the newest tutorials.

Subscribe to the Statistics Globe Newsletter

September 20, 2021 3:24 am

Joachim:
Thank you very much for your explanation. With it I could draw boxplots (vertical and horizontal) with the mean value indicated (for one group) and with base R.

• Thank you very much for the kind comment IsaÃ­as! Great to hear that the tutorial helped you to create some nice graphics ðŸ™‚

Regards

Joachim

• Excellent explantation, I’ve been wandering a whole week trying to find the easiest way to draw mean and median in boxplots with ggplot2. Thank you !

Sofia

• You are welcome, Sofia! Have a good one ðŸ™‚

• One question, how can I have mean + standard deviation values shown above the box plots using ggplot 2? It would be visually more clear if the numbers are not inside the box plots. Thank you!

• Hello Anni,

Would something like the following help?

```# Calculate summary statistics
library(dplyr)
summ_stats <- data %>%
group_by(group) %>%
summarise(mean=mean(values), sd=sd(values), Q3=quantile(values, 0.75),  .groups = 'drop')

# Create the ggplot
library(ggplot2)

p <- ggplot(data, aes(x=group, y=values)) +
geom_boxplot() +
geom_text(data=summ_stats, aes(y=Q3, label=paste("Mean: ", round(mean, 1), "\nSD: ", round(sd, 1))), vjust=-1.5, color = "red") +
theme_minimal()

print(p)```