ggplot 具有共同密度的多重密度

ggplot multiple densities with common density

我想绘制一些东西 "between" 直方图和密度图。这是一个例子:

library(ggplot2)

set.seed(1)
f1 <- rep(1, 100)
v1 <- rnorm(100)
df1 <- data.frame(f1, v1)

f1 <- rep(2, 10)
v1 <- (rnorm(10)+1*2)
df2 <- data.frame(f1, v1)

df <- rbind(df1, df2)
df$f1 <- as.factor(df$f1)

ggplot(df, aes(x = v1, colour = f1)) +
  geom_density(position="identity", alpha = 0.6, fill = NA, size = 1)

您会看到每条曲线下的面积为 1.0,这对于密度来说是可以的。但请注意,第二个分布仅由 10 个观察值组成,而不是第一个分布的 100 个。我想要的是曲线 2 下的面积反映了这一点,例如是曲线 1 的十分之一。谢谢。

您可以使用 stat_density 的计算变量,称为 count

ggplot(df, aes(x = v1, colour = f1)) +
  geom_density(position="identity", alpha = 0.6, fill = NA, size = 1,
               aes(y = after_stat(count)))

  • ggplot2 <3.3.0 的注释使用 stat(count) 而不是 after_stat(count)

您可以在 "Computed Variables" 部分下的 ?geom_density() 文档中找到这些技巧。