首页 > 解决方案 > ggplot 具有共同密度的多个密度

问题描述

我想绘制直方图和密度图“之间”的东西。这是一个例子:

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的十分之一。谢谢。

从不同样本量估计的两个重叠密度图

标签: ggplot2overlapdensity-plot

解决方案


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).

?geom_density()您可以在“计算变量”部分的文档中找到这些技巧。


推荐阅读