У меня есть набор данных с видами SP1 and SP2
и абиотическими переменными AB1 and AB2
. Я хочу изобразить их все на графике, но с изменениями
Точки: отображать точки SP1 и SP2, но НЕ точки AB1 и AB2 на графике.
Линии: линии AB должны быть черными пунктирными (см. попытку кода, которая не сработала)
Доверительные интервалы: Только линии SP должны иметь доверительные интервалы. Доверительные интервалы должны иметь альфа = 0,2
set.seed(111)
var <- rep(c("SP1","SP2","AB1","AB2"), times = 5)
var.val <- rnorm(20,5,1)
level <- rep(c(100,200,300,400), each = 5)
df <- data.frame(var, var.val, level)
ggplot(df, aes(x = level, y = var.val, col = var, group = var)) +
geom_point(aes(fill = var),colour = "white",pch=21, size=4, stroke = 1, alpha = 0.7, position = pd) + theme_classic() +
geom_smooth(method = "lm", formula = y ~ x ) +
scale_linetype_manual(values = c("dashed", "dashed","solid", "solid")) +
scale_colour_manual(values = c("black","black","red","blue"))
Этого можно добиться, передав отфильтрованные версии фрейма данных каждому слою:
ggplot(df, aes(x = level, y = var.val, col = var, group = var)) +
geom_point(aes(fill = var), colour = "white",pch=21, size=4, stroke = 1,
alpha = 0.7, data = df[df$var %in% c("SP1", "SP2"),]) +
theme_classic() +
geom_smooth(data = df[df$var %in% c("SP1", "SP2"),],
method = "lm", formula = y ~ x, alpha = 0.2) +
geom_smooth(data = df[!df$var %in% c("SP1", "SP2"),],
method = "lm", formula = y ~ x, se = FALSE, linetype = 2 ) +
scale_linetype_manual(values = c("dashed", "dashed","solid", "solid")) +
scale_colour_manual(values = c("black","black","red","blue"))
Хотя, если AB и SP концептуально являются двумя разными переменными, вы можете рассмотреть возможность перехода к более широкому формату.