Предполагаю, что переменные - это числа ... Использование geom_smooth (я проверил с помощью mtcars
):
library(ggplot2)
ggplot(a, aes(V1, V2, color = V3)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE) +
geom_smooth(aes(color = "all"), method = "lm", se = FALSE)
Чтобы вручную настроить легенды, смотрите, например, здесь: Как добавить легенду в строку ggplot2 с точечным графиком?
Вычисление линий регрессии вручную и использование geom_line
. Используя mtcars
(V1 = mpg, V2 = hp, V3 = cyl) в качестве примера данных:
library(ggplot2)
library(dplyr)
library(purrr)
df <- mtcars %>%
mutate(p_all = predict(lm(hp ~ mpg, .))) %>%
group_split(cyl) %>%
map(~ mutate(.x, p_cyl = predict(lm(hp ~ mpg, .x)))) %>%
bind_rows(.id = "dataset")
ggplot(df, aes(mpg, color = factor(cyl))) +
geom_point(aes(y = hp)) +
geom_line(aes(y = p_cyl, group = factor(cyl))) +
geom_line(aes(y = p_all, color = "all"))
Идея состоит в том, чтобы сначала добавить прогнозные значения для всего набора данных (p_all), а затем разделить набор данных, добавить прогнозируемые значения для каждого из наборов данных (p_cyl) и связать их вместе. Идея построения графика на одном графике, по сути, та же, что и при использовании geom_smooth
.
. И если вы просто хотите построить линию регрессии только для одного из ваших наборов данных, это работает в основном так же. Просто настройте весы вручную. Надеюсь, что я становлюсь ближе к сюжету, который вы имели в виду (;:
ggplot(df, aes(mpg, color = factor(cyl), linetype = factor(cyl), shape = factor(cyl))) +
geom_point(aes(y = hp)) +
geom_line(aes(y = p_all, color = "all", linetype = "all", , shape = "all")) +
geom_line(aes(y = p_cyl, group = factor(cyl))) +
scale_linetype_manual(values = c(1, NA, NA, 1)) +
scale_shape_manual(values = c(16, 16, 16, NA))