Стеки разных участков в фасетной манере

Чтобы потренироваться с ggplot и улучшить свои навыки написания R-функций, я решил создать серию функций, которые создают графики выживания со всеми видами дополнений. Мне удалось построить хорошую рабочую функцию для базового сюжета выживания, теперь я перехожу к статистам. Одна вещь, которую я хотел бы сделать, - это вариант, который накладывает график площади числа, подверженного риску в данный момент времени, поверх графика выживания. Я хотел бы, чтобы это выглядело так же, как facet_grid вариант ggplot, но мне не удалось сделать это с этой функцией. Я не хочу, чтобы два участка были связаны, как мы можем сделать с grid.arrange, а точнее, чтобы иметь ту же ось х.

Следующий код создает два (упрощенных) графика, которые я хотел бы разместить друг над другом. Я пытался сделать это с facet_grid, но я не думаю, что решение заключается в этом

library(survival)
library(ggplot2)
data(lung)
s <- survfit(Surv(time, status) ~ 1, data = lung)
dat <- data.frame(time = c(0, s$time),
                  surv = c(1, s$surv),
                  nr = c(s$n, s$n.risk))
pl1 <- ggplot(dat, aes(time, surv)) + geom_step()

pl2 <- ggplot(dat, aes(time, nr)) + geom_area()

1 ответ

Решение

Во-первых, сведите ваши данные в длинный формат.

library(reshape2)
dat.long<-melt(dat,id.vars="time")
head(dat.long)
  time variable     value
1    0     surv 1.0000000
2    5     surv 0.9956140
3   11     surv 0.9824561
4   12     surv 0.9780702
5   13     surv 0.9692982
6   15     surv 0.9649123

Тогда используйте subset() использовать только surv данные в geom_step() а также nr данные в geom_area() и с facet_grid() вы получите каждый сюжет в отдельном аспекте, как variable используется для разделения данных для фасетирования и для поднабора. scales="free_y" сделает красивую ось.

ggplot()+geom_step(data=subset(dat.long,variable=="surv"),aes(time,value))+
  geom_area(data=subset(dat.long,variable=="nr"),aes(time,value))+
  facet_grid(variable~.,scales="free_y")

введите описание изображения здесь

Другие вопросы по тегам