С помощью ggplot выведите на график ядра различной плотности (с площадью = 1) для нескольких групп в разные моменты времени. - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь построить (на одном графике) две плотности ядра (на основе двух выборок с разными размерами выборки) для двух разных моментов времени.

К сожалению, мне не удается сделать область под кривой равной 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

1 Ответ

0 голосов
/ 15 февраля 2019

Мне наконец удалось получить нужную мне фигуру.

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

новая фигура

...