ggplot2带底R的几何线魔术?

ggplot2带底R的几何线魔术?,r,plot,R,Plot,是否有一个选项,以获得与基本R相同的geom_line结果?感觉这应该很容易,但当我试图理解geom_line在做什么(以及如何做)时,我在代码中迷失了方向。 (应该可以通过任意数量的“行”实现自动化,而不仅仅是2行。) 背景:我想在下面的代码中显示“适合的两行”,但我没有成功。有什么想法吗 可复制示例: library(ggplot2) set.seed(1) sd_age <- 1000 age <- sample(c(20:65), 24) s_a1 <- 80000 +

是否有一个选项,以获得与基本R相同的
geom_line
结果?感觉这应该很容易,但当我试图理解
geom_line
在做什么(以及如何做)时,我在代码中迷失了方向。 (应该可以通过任意数量的“行”实现自动化,而不仅仅是2行。)

背景:我想在下面的代码中显示“适合的两行”,但我没有成功。有什么想法吗

可复制示例:

library(ggplot2)
set.seed(1)
sd_age <- 1000
age <- sample(c(20:65), 24)
s_a1 <- 80000 + 100 * age[1:8]
s_a2 <- 70000 + 100 * age[9:24]
df <- data.frame(salary = c(s_a1, s_a2),
                 dep = c(rep("A1", length(s_a1)),rep("A2", length(s_a2))),
                 age = c(age[1:8], age[9:24]),
                 gender = c(0, 1, 0, 1, 0, 1, 0, 1,
                            1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1),
                 stringsAsFactors = FALSE)
df$gender <- as.factor(df$gender)
df$dep <- as.factor(df$dep)
df$salary <- df$salary + rnorm(nrow(df), 0, sd_age)
fit2 <- lm(salary ~ age + dep, data = df)
df$fit2 <- predict(fit2)

ggplot(df, aes(x = age, y = salary, shape = dep, colour = gender, fill = dep)) +
  geom_point(size = 3) +
  xlab("age") +
  ylab("salary") +
  ggtitle("whatever") +
  geom_line(data = df, 
            mapping = aes(x = age, y = fit2), size = 1.2, color = "blue")

将每个
dep
的数据子集,然后分别绘制

with(df, plot(age, salary,
              col = ifelse(gender == 0, "red", "blue"),
              pch = ifelse(gender == 0, 19, 15)))
for (grp in unique(df$dep)) {
    with(df[df$dep == grp,], lines(sort(age), fit2[order(age)], col = "blue"))
}

将每个
dep
的数据子集,然后分别绘制

with(df, plot(age, salary,
              col = ifelse(gender == 0, "red", "blue"),
              pch = ifelse(gender == 0, 19, 15)))
for (grp in unique(df$dep)) {
    with(df[df$dep == grp,], lines(sort(age), fit2[order(age)], col = "blue"))
}

哇-总是很神奇!我知道有一个优雅的解决方案!比我想象的还要多;-)哇-总是很棒!我知道有一个优雅的解决方案!比我想象的还要多;-)