gpt4 book ai didi

r - 以分面方式堆叠不同的图

转载 作者:行者123 更新时间:2023-12-02 21:01:19 24 4
gpt4 key购买 nike

为了使用 ggplot 进行训练并提高编写 R 函数的技能,我决定构建一系列能够生成生存图的函数,以及各种附加功能。我成功地为基本生存情节构建了一个良好的工作功能,现在我开始了解额外内容。我想做的一件事是一个选项,将给定时间点处于危险中的人数的面积图堆叠在生存图的顶部。我希望它看起来像 ggplot 的 facet_grid 选项,但我没有设法用这个函数来做到这一点。我不希望这两个图绑定(bind)在一起,就像我们可以使用 grid.arrange 那样,而是希望具有相同的 x 轴。

以下代码生成两个(简化的)图,我想将它们堆叠在一起。我尝试使用 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()

enter image description here

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

enter image description here

最佳答案

首先,将数据转换为长格式。

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()仅使用geom_step()中的surv数据和nr数据geom_area() 并使用 facet_grid() 您将在单独的方面获得每个图,因为变量用于划分数据以进行分面和子集化。 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")

enter image description here

关于r - 以分面方式堆叠不同的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com