R语言 ggplot2包为每组的平均数添加线条
在这篇文章中,我们将讨论如何在R语言的散点图中为每组的平均值添加一条线。
在R语言中,我们可以通过使用group_by()和summaryise()函数来创建一个平均向量来实现。然后,我们可以使用这个平均向量和ggplot2包的geom_hline()函数来创建一条按组别着色的平均点的线。
要从数据框中创建一个平均向量。
语法
mean <- df %>%
group_by( <categorical-variable> ) %>%
summarise( mean_val = mean( <quantitative-variable> )
参数
- df: 确定要使用的数据框架。
- **< categorical-variable>: **确定用于将数据分成组的变量。
- **< quantitative-variable>: **决定了要找到其平均值的变量。
这个表达式创建了一个有两列的向量,即<分类变量>和存储分类平均值的平均值。现在,我们将把这个平均数向量与geom_hline()函数一起使用,在按分类变量着色的数据的平均数/平均值处添加一条水平线。
语法
plot + geom_hline( mean_df, aes( yintercept, col )
参数:
- mean_df: 确定包含平均值信息的数据框。
- yintercept: 决定数据框架中的变量平均数列。
- col: 决定用哪一个分类变量来给线条着色。
例子1 :
在这个例子中,我们创建了一个用分类变量着色的散点图。然后,我们添加了一条由同一变量着色的线,穿过该类数据的平均值。
# 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))
输出
例2 :
在这个例子中,我们创建了一个由分类变量着色的散点图。然后,我们添加了一条由同一变量着色的线,穿过该类数据的平均值。我们还添加了一个facet_grid(),将该图转换成facet图,以便通过分类变量更好地可视化数据。
# 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)
输出