如何避免ggplot2中的平坦密度线

时间:2020-04-30 08:59:02

标签: r ggplot2 histogram kernel-density density-plot

我正在尝试在2个重叠的直方图上绘制一条密度线,但是在我使用的每个代码中,该线都变得“平坦”。

我必须创建两个直方图,每个直方图具有正态分布,并且样本数量不同。然后,我必须将两者重叠并写下密度线。全部带有ggplot2软件包。

这是我尝试过的:

xx<-data.frame(dat = rnorm(n, mean, sd))
yy<-data.frame(dat = rnorm(n, mean, sd))
both<-rbind(xx, yy)

ggplot(both, aes(x=dat)) + 
    geom_histogram(data = xx, fill = "red", alpha = 0.2,binwidth=0.25) + 
    geom_histogram(data = yy, fill = "blue", alpha = 0.2, binwidth=0.25) +
    theme_light() +
    geom_line(data=samples, stat = "density")

我也尝试过geom_density,但是结果是一样的...

1 个答案:

答案 0 :(得分:1)

密度线不是平坦的,相对于直方图而言,它的缩放比例完全不同,因为默认情况下,直方图是使用y轴上的计数创建的。

您应指定y = after_stat(density)

# packages
library(ggplot2)

# data
set.seed(1)
sample1 <- data.frame(dat = rnorm(10000, 0, 1))
sample2 <- data.frame(dat = rnorm(15000, 3, 1))
both <- rbind(sample1, sample2)

ggplot(both, aes(x = dat)) + 
  geom_histogram(aes(y = after_stat(density)), data = sample1, fill = "red", alpha = 0.2, binwidth = 0.25) + 
  geom_histogram(aes(y = after_stat(density)), data = sample2, fill = "blue", alpha = 0.2, binwidth=0.25) +
  theme_light() +
  geom_line(stat = "density")

reprex package(v0.3.0)于2020-04-30创建

黑线表示两种正态分布的混合。您应该阅读after_stat函数的帮助页面以获取更多详细信息。

相关问题