In my plot below, I have two separate sources of data
(dat
and dat2
) used in two different geom_smooth()
calls producing the black and the red regression lines (see pic below).
Is it possible to manually add another legend
that shows the black line is called "Between"
and red line is called "Within"
?
library(tidyverse)
dat <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/cw2.csv')
dat$groups <- factor(dat$groups)
dat2 <- dat %>% group_by(groups) %>% summarize(mean_x = mean(x),
mean_y = mean(y),
.groups = 'drop')
dat %>%
ggplot() +
aes(x, y, color = groups, shape = groups)+
geom_point(size = 2) + theme_classic()+
stat_ellipse(level = .6) +
geom_point(data = dat2,
mapping = aes(x = mean_x, y = mean_y,fill = factor(groups)),
size = 4, show.legend = F,shape=21) +
geom_smooth(data = dat2, mapping = aes(x = mean_x, y = mean_y,group=1),
method = "lm", se=F, color = 1, formula = 'y ~ x')+
geom_smooth(aes(group = 1),
method = "lm", se=F, color = 2, formula = 'y ~ x')+
scale_fill_manual(values=rep('black',3))
It looks like you need a second color scale to do this. You can use the ggnewscale
package:
library(ggnewscale)
dat %>%
ggplot() +
aes(x, y, color = groups, shape = groups) +
geom_point(size = 2) +
theme_classic() +
stat_ellipse(level = .6) +
geom_point(data = dat2,
mapping = aes(x = mean_x, y = mean_y),
size = 4, show.legend = FALSE, shape = 21, fill = "black") +
scale_color_discrete() +
new_scale_color() +
geom_smooth(data = dat2,
mapping = aes(x = mean_x, y = mean_y, group = 1, color = "black"),
method = "lm", se = FALSE, formula = 'y ~ x') +
geom_smooth(aes(group = 1, color = "red"),
method = "lm", se = FALSE, formula = 'y ~ x') +
scale_color_identity(name = "", labels = c("Between", "Within"),
guide = guide_legend())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With