使用ggplot在不同时间点为多个组绘制多个密度内核(区域= 1)

问题描述 投票:0回答:1

我试图绘制(在单个图中)两个不同时间点的两个内核密度(基于两个样本具有不同的样本大小)。

不幸的是,我无法设法使曲线下面积等于1,以使密度具有可比性(例如,参见下图1)。

下面是我的代码示例和相应的图:

library(ggplot2)
library(ggridges)

sim.data1 <- data.frame(
  time = c(rep(1, times = 1000), rep(2, times = 1000)), 
  x = c(rnorm(1000, mean =0 , sd =1 ), rnorm(1000, mean =5 , sd =1 ))
)

sim.data2 <- data.frame(
  time = c(rep(1, times = 300), rep(2, times = 300)), 
  x = c(rnorm(300, mean =0 , sd =1 ), rnorm(300, mean =7 , sd =1 ))
)

ggplot(sim.data1, 
       aes(x = x, y = time, group = time, fill = "red", alpha = 0.5))+           
  geom_density_ridges(scale = 1)+ 
  geom_density_ridges(data = sim.data2, 
                      mapping=aes(x = x, y = time, group=time, fill = "blue"))+
  geom_density_ridges(scale = 1)+ 
  theme(legend.position = "none")

example

r ggplot2 area kernel-density
1个回答
0
投票

我终于设法得到了我想要的数字。

sim.data1 <- data.frame(
time = c(rep(1, times = 1000), rep(2, times = 1000)), 
x = c(rnorm(1000, mean =0 , sd =1 ), rnorm(1000, mean =5 , sd =1 ))
case=rep(1, times = 2*1000)
)

sim.data2 <- data.frame(
time = c(rep(1, times = 300), rep(2, times = 300)), 
x = c(rnorm(300, mean =0 , sd =1 ), rnorm(300, mean =7 , sd =1 )),
case=rep(2, times = 2*300)
)



ggplot(sim.data1, aes(x = x, y =time, group=time,alpha=0.5) ,fill=case)+
geom_density_ridges()+
geom_density_ridges(data= sim.data2, mapping= aes(x = x, y =time,group=time,alpha=0.5,fill=case))+
theme(legend.position = "none")

new figure

© www.soinside.com 2019 - 2024. All rights reserved.