ggplot2 - 创建一个关于总样本大小的堆积密度图

ggplot2 - Create a stacked density plot with respect to the total sample size

假设我们有两个样本量不同的组,"a" 和 "b"。

n = 10000
set.seed(123)
dist1 = round(rnorm(n, mean = 1, sd=0.5), digits = 1)
dist2 = round(rnorm(n/10, mean = 2, sd = 0.2), digits = 1)
df = data.frame(group=c(rep("a", n), rep("b", n/10)), value=c(dist1,dist2))

我想将以下堆叠条形图转换为堆叠密度图。

library(ggplot2)
ggplot(data=df, aes(x=value, y=(..count..)/sum(..count..), fill=group)) +
  geom_bar()

我知道密度图有一个选项 position="stack"。但是,结果如下所示,因为密度的高度是相对于组样本大小,而不是总样本大小。因此,在某种程度上,这个小群体的人数过多了。

ggplot(data=df, aes(x=value, fill=group)) +
  geom_density(position="stack")

有没有办法创建对应于上述条形图的密度图?

如果您绘制密度图,则 y 轴不同于您从第一个直方图获得的轴,其中您的 y 轴反映超过 total 的计数。要获得接近的结果,您可以尝试下面的方法,其中直方图函数用于获取计数、转换然后堆叠:

library(dplyr)
library(ggplot2)

RN =range(df$value)

df %>% group_by(group) %>%
do(data.frame(hist(.$value,breaks=seq(RN[1],RN[2],
length.out=40),plot=FALSE)[c("mids","counts")])) %>%
mutate(freq=counts/nrow(df)) %>%
ggplot(aes(x=mids,y=freq,col=group)) + geom_line(position="stack")

是否只对密度图做与对条形图所做的相同的事情不能给你想要的东西?

   ggplot(data=df, aes(x=value, fill=group)) +
     geom_density( aes(y = ..count../sum(..count..)),  position="stack", alpha=.7)

这给出了