You can use the following basic syntax to plot a mean line by group in ggplot2:

#calculate mean points value by team mean_team <- df %>% group_by(team) %>% summarise(mean_pts=mean(points)) #create scatterplot of assists vs points with mean line of points by team ggplot(df, aes(x=assists, y=points)) + geom_point(aes(color=team)) + geom_hline(data=mean_team, aes(yintercept=mean_pts, col=team))

This particular example creates a scatterplot of the variables **assists** vs. **points**, then adds a line to represent the mean **points** value grouped by the **team** variable.

The following example show how to use this syntax in practice.

**Example: Plot Mean Line by Group in ggplot2**

Suppose we have the following data frame in R that contains information about points and assists for basketball players on three different teams:

**#create data frame
df <- data.frame(team=rep(c('A', 'B', 'C'), each=5),
assists=c(2, 4, 4, 5, 6, 6, 7, 7,
8, 9, 7, 8, 13, 14, 12),
points=c(8, 8, 9, 9, 10, 9, 12, 13,
14, 15, 14, 14, 16, 19, 22))
#view data frame
df
team assists points
1 A 2 8
2 A 4 8
3 A 4 9
4 A 5 9
5 A 6 10
6 B 6 9
7 B 7 12
8 B 7 13
9 B 8 14
10 B 9 15
11 C 7 14
12 C 8 14
13 C 13 16
14 C 14 19
15 C 12 22
**

We can use the following code to create a scatterplot of the variables **assists** vs. **points**, then add a line to represent the mean **points** value grouped by the **team** variable.

**library(dplyr)
library(ggplot2)
#calculate mean points value by team
mean_team <- df %>% group_by(team) %>% summarise(mean_pts=mean(points))
#create scatterplot of assists vs points with mean line of points by team
ggplot(df, aes(x=assists, y=points)) +
geom_point(aes(color=team)) +
geom_hline(data=mean_team, aes(yintercept=mean_pts, col=team))**

The three lines are color-coded to display the mean points value for each team.

We can display the **mean_team** data frame we created to see the actual mean points values for each team:

**#view mean points value by team
mean_team
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 3 x 2
team mean_pts
1 A 8.8
2 B 12.6
3 C 17 **

From the output we can see:

- The mean points value for players on team A is
**8.8** - The mean points value for players on team B is
**12.6** - The mean points value for players on team C is
**17**

These values match the locations of the lines on the y-axis of the scatterplot that we created.

**Additional Resources**

The following tutorials explain how to perform other common tasks in R:

How to Create a Relative Frequency Histogram in R

How to Plot Multiple Boxplots in One Chart in R

How to Plot Multiple Lines in One Chart in R