R:按条件和平均图叠加密度图

R: Overlay density plots by condition and by average plot

我能够使用提供的代码创建显示的两个密度图。我希望做的是创建一个结合两者的图表。本质上,我想将黑线覆盖在按条件着色的图的顶部。

d1 <- ggplot(df, aes(x=a)) + geom_density()

d2 <- ggdensity(biolReps, x = "a", color = "b",fill = "b"

这就是你想要的吗?我在这里使用 after_stat 来缩小条件密度图,使其低于总密度。 (根据定义,尖峰密度较小,峰密度往往低于条件密度。)

ggplot(mtcars) +
  geom_density(aes(mpg)) +
  geom_density(aes(mpg, after_stat(count) * 0.01, 
                   group = cyl, fill = as.character(cyl)), alpha = 0.2)

如果你想把它转换成一个函数,你可以使用类似下面的东西。 {{ }} 或“拥抱”运算符用于将变量名称转发到函数的环境中。更多内容在 https://rlang.r-lib.org/reference/topic-data-mask-programming.html#embrace-with-

plot_densities <- function(df, var, group) {
  ggplot(df) +
    geom_density(aes( {{ var }} )) +
    geom_density(aes( {{ var }}, after_stat(count) * 0.01, 
                     group = {{ group }}, 
                     fill = as.character( {{ group }} )), alpha = 0.2)
}

plot_densities(mtcars, mpg, cyl)