使用 R 中的 ggplot2 包为每组的平均值添加行
在本文中,我们将讨论如何在 R 编程语言的散点图中为每组的平均值添加一条线。
在 R 语言中,我们可以通过使用 group_by() 和 summarise()函数创建一个均值向量来做到这一点。然后我们可以使用该均值向量以及 ggplot2 包的 geom_hline()函数,通过组着色的均值点创建一条线。
要从数据框创建平均向量,
句法:
mean <- df %>%
group_by( ) %>%
summarise( mean_val = mean( )
论据:
- df:确定要使用的数据框。
-
: 确定用于将数据分组的变量。 -
: 确定要求均值的变量。
此表达式创建一个包含两列的向量,即
句法:
plot + geom_hline( mean_df, aes( yintercept, col )
论据:
- mean_df:确定包含均值信息的数据框。
- yintercept:确定数据框中的变量均值列。
- col:确定必须为行着色的分类变量。
示例 1:
在此示例中,我们创建了一个由分类变量着色的散点图。然后,我们添加了一条由相同变量着色的线,该线穿过该数据类别的平均值。
R
# load library tidyverse
library(tidyverse)
# create dataframe
df <- data.frame(
group=factor(rep(c("category1", "category2","category3"),
each=100)),
y=round(c(rnorm(100, mean=65, sd=5),
rnorm(100, mean=85, sd=5),
rnorm(100, mean=105, sd=5))),
x=rnorm(300))
# create mean by group
mean <- df%>% group_by(group)%>%summarise(mean_val=mean(y))
# create ggplot scatter plot
# add horizontal line overlay at mean using geom_hline()
ggplot(data = df, aes(x= x, y=y)) +
geom_point(aes(colour = group)) +
geom_hline(data= mean, aes(yintercept = mean_val,col=group))
R
# load library tidyverse
library(tidyverse)
# create dataframe
df <- data.frame(
group=factor(rep(c("category1", "category2","category3"),
each=100)),
y=round(c(rnorm(100, mean=65, sd=5),
rnorm(100, mean=55, sd=5),
rnorm(100, mean=60, sd=5))),
x=rnorm(300))
# create mean by group
mean <- df%>% group_by(group)%>%summarise(mean_val=mean(y))
# create ggplot scatter plot
# add horizontal line overlay at mean using geom_hline()
# divide plot in facet using function facet_grid()
ggplot(data = df, aes(x= x, y=y)) +
geom_point(aes(colour = group)) +
geom_hline(data= mean, aes(yintercept = mean_val,col=group))+
facet_grid(~group)
输出:
示例 2:
在此示例中,我们创建了一个由分类变量着色的散点图。然后,我们添加了一条由相同变量着色的线,该线穿过该数据类别的平均值。我们还添加了一个 facet_grid() 来将此图转换为分面图,以便通过分类变量更好地可视化数据。
R
# load library tidyverse
library(tidyverse)
# create dataframe
df <- data.frame(
group=factor(rep(c("category1", "category2","category3"),
each=100)),
y=round(c(rnorm(100, mean=65, sd=5),
rnorm(100, mean=55, sd=5),
rnorm(100, mean=60, sd=5))),
x=rnorm(300))
# create mean by group
mean <- df%>% group_by(group)%>%summarise(mean_val=mean(y))
# create ggplot scatter plot
# add horizontal line overlay at mean using geom_hline()
# divide plot in facet using function facet_grid()
ggplot(data = df, aes(x= x, y=y)) +
geom_point(aes(colour = group)) +
geom_hline(data= mean, aes(yintercept = mean_val,col=group))+
facet_grid(~group)
输出: