ggplot 根据因素将段添加到散点图
ggplot add segments to scatter plot according to factors
我有以下'code'
set.seed(100)
values<-c(rnorm(200,10,1),rnorm(200,2.1,1),rnorm(250,6,1),rnorm(75,2.1,1),rnorm(50,9,1),rnorm(210,2.05,1))
rep1<-rep(3,200)
rep2<-rep(0,200)
rep3<-rep(1,250)
rep4<-rep(0,75)
rep5<-rep(2,50)
rep6<- rep(0,210)
group<-c(rep1,rep2,rep3,rep4,rep5,rep6)
df<-data.frame(values,group)
我想将这些数据绘制成散点图(如附图)并添加分段。这些段(y 值)应代表给定组的数据平均值。此外,段应根据因素(组)具有不同的颜色。有没有一种有效的方法来使用 ggplot ?
非常感谢
我们可以通过稍微增加您的数据来做到这一点。我们将使用 dplyr
通过 group
获得平均值,并且我们将创建变量来提供观察指数,并且每次 group
变化时都会增加一个变量(这将是有助于获得所需的细分):1
library(dplyr)
df <- df %>%
mutate(idx = seq_along(values), group = as.integer(group)) %>%
group_by(group) %>%
mutate(m = mean(values)) %>%
ungroup() %>%
mutate(group2 = cumsum(group != lag(group, default = -1)))
现在我们可以制作剧情了;使用 geom_line()
并按 group2
分组,每次组更改时都会更改,从而生成您想要的细分。然后我们只需按 group
:
(的离散化版本)着色
ggplot(data = df, mapping = aes(x = idx, y = values)) +
geom_point(shape = 1, color = "blue") +
geom_line(aes(x = idx, y = m, group = group2, color = as.factor(group)),
size = 2) +
scale_color_manual(values = c("red", "black", "green", "blue"),
name = "group") +
theme_bw()
1 参见
我有以下'code'
set.seed(100)
values<-c(rnorm(200,10,1),rnorm(200,2.1,1),rnorm(250,6,1),rnorm(75,2.1,1),rnorm(50,9,1),rnorm(210,2.05,1))
rep1<-rep(3,200)
rep2<-rep(0,200)
rep3<-rep(1,250)
rep4<-rep(0,75)
rep5<-rep(2,50)
rep6<- rep(0,210)
group<-c(rep1,rep2,rep3,rep4,rep5,rep6)
df<-data.frame(values,group)
我想将这些数据绘制成散点图(如附图)并添加分段。这些段(y 值)应代表给定组的数据平均值。此外,段应根据因素(组)具有不同的颜色。有没有一种有效的方法来使用 ggplot ?
非常感谢
我们可以通过稍微增加您的数据来做到这一点。我们将使用 dplyr
通过 group
获得平均值,并且我们将创建变量来提供观察指数,并且每次 group
变化时都会增加一个变量(这将是有助于获得所需的细分):1
library(dplyr)
df <- df %>%
mutate(idx = seq_along(values), group = as.integer(group)) %>%
group_by(group) %>%
mutate(m = mean(values)) %>%
ungroup() %>%
mutate(group2 = cumsum(group != lag(group, default = -1)))
现在我们可以制作剧情了;使用 geom_line()
并按 group2
分组,每次组更改时都会更改,从而生成您想要的细分。然后我们只需按 group
:
ggplot(data = df, mapping = aes(x = idx, y = values)) +
geom_point(shape = 1, color = "blue") +
geom_line(aes(x = idx, y = m, group = group2, color = as.factor(group)),
size = 2) +
scale_color_manual(values = c("red", "black", "green", "blue"),
name = "group") +
theme_bw()
1 参见