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 参见