ggplot2密度绘制R中不同大小的数据

l0o*_*0o0 6 r ggplot2

我有两个数据集,它们的大小是500和1000.我想在一个图中绘制这两个数据集的密度.
我在谷歌做了一些搜索.

上面线程中的数据集是相同的

df <- data.frame(x = rnorm(1000, 0, 1), y = rnorm(1000, 0, 2), z = rnorm(1000, 2, 1.5))
Run Code Online (Sandbox Code Playgroud)

但是如果我有不同的数据大小,我应该首先规范化数据,以便比较数据集之间的密度.

是否有可能在ggplot2中制作具有不同数据大小的密度图?

Cla*_*lke 6

默认情况下,所有密度都按比例缩放到单位面积。如果您有两个数据量不同的数据集,则可以将它们绘制在一起,如下所示:

df1 <- data.frame(x = rnorm(1000, 0, 2))
df2 <- data.frame(y = rnorm(500, 1, 1))

ggplot() + 
  geom_density(data = df1, aes(x = x), 
               fill = "#E69F00", color = "black", alpha = 0.7) + 
  geom_density(data = df2, aes(x = y),
               fill = "#56B4E9", color = "black", alpha = 0.7)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,根据您的最新评论,我认为那不是您想要的。相反,您希望相对于每个组中的数据量来缩放密度曲线下的面积。您可以通过..count..美学来做到这一点:

df1 <- data.frame(x = rnorm(1000, 0, 2), label=rep('df1', 1000))
df2 <- data.frame(x = rnorm(500, 1, 1), label=rep('df2', 500))
df=rbind(df1, df2)

ggplot(df, aes(x, y=..count.., fill=label)) + 
  geom_density(color = "black", alpha = 0.7) + 
  scale_fill_manual(values = c("#E69F00", "#56B4E9"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明