【问题标题】:R: Overlay density plots by condition and by average plotR:按条件和平均图叠加密度图
【发布时间】:2021-11-04 03:16:31
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您包含一个简单的reproducible example 以及可用于测试和验证可能的解决方案的示例输入,则会更容易为您提供帮助。

标签: r ggplot2 density-plot


【解决方案1】:

这就是你想要的吗?我在这里使用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)

如果你想把它转换成一个函数,你可以使用类似下面的东西。 {{ }} 或“embrace”运算符用于将变量名转发到函数的环境中。更多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)

【讨论】:

  • 我希望把它变成一个函数,这样我就可以在多个列上重用。我可以使用ggplot(df) + geom_density(aes_string(column)) 以这种方式获得总密度图,其中列作为“columnName”传递给函数,但我无法让 aes_string 与代码的第二部分一起使用。这很容易解决吗?
  • 我添加了一个如何将其变成函数的示例。
猜你喜欢
  • 2020-08-08
  • 2012-03-04
  • 2023-03-28
  • 2020-06-01
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多