How to Create a Grouped Barplot in R (With Examples)

Creating a grouped barplot in R is a simple process that requires a data frame and the help of the barplot() function. First, it is necessary to organize the data in a data frame in which the rows contain the groups and the columns hold the values for each group. Then, the barplot() function can be used to create a plot in which the bars are grouped together. Examples of how to do this in R are included in this article.


A grouped barplot is a type of chart that displays quantities for different variables, grouped by another variable.

This tutorial explains how to create grouped barplots in R using the data visualization library ggplot2.

Grouped Barplot in ggplot2

Suppose we have the following data frame that displays the average points scored per game for nine basketball players:

#create data frame
df <- data.frame(team=rep(c('A', 'B', 'C'), each=3),
                 position=rep(c('Guard', 'Forward', 'Center'), times=3),
                 points=c(14, 8, 8, 16, 3, 7, 17, 22, 26))

#view data frame
df

  team position points
1    A    Guard     14
2    A  Forward      8
3    A   Center      8
4    B    Guard     16
5    B  Forward      3
6    B   Center      7
7    C    Guard     17
8    C  Forward     22
9    C   Center     26

We can use the following code to create a grouped barplot that displays the points scored by each player, grouped by team and position:

library(ggplot2)

ggplot(df, aes(fill=position, y=points, x=team)) + 
  geom_bar(position='dodge', stat='identity')

Grouped barplot in R

Customizing a Grouped Barplot

We can also customize the title, axes labels, theme, and colors of the grouped barplot to make it look however we’d like:

library(ggplot2)

ggplot(df, aes(fill=position, y=points, x=team)) + 
  geom_bar(position='dodge', stat='identity') +
  theme_minimal() + 
  labs(x='Team', y='Points', title='Avg. Points Scored by Position & Team') +
  theme(plot.title = element_text(hjust=0.5, size=20, face='bold')) +
  scale_fill_manual('Position', values=c('coral2', 'steelblue', 'pink'))

Grouped barplot in R with ggplot2

We can customize the appearance even more by using one of the themes in the ggthemes library. For example, we could use the Wall Street Journal Theme from this library:

install.packages('ggthemes')

library(ggplot2)
library(ggthemes)

ggplot(df, aes(fill=position, y=points, x=team)) + 
  geom_bar(position='dodge', stat='identity') +
  theme_wsj()

Grouped barplot in R with ggthemes

Refer to our Complete Guide to the Best ggplot2 Themes for even more themes.

How to Create a Stacked Barplot in R
How to Create a Grouped Boxplot in R Using ggplot2
How to Create Side-by-Side Plots in ggplot2

x