patchwork包是一个非常方便能够对多个ggplot对象进行排序、合并输出的包。但是在批量做生存曲线的时候,发现这个包不能对ggsurvplot对象进行排序,并且会出现如下报错:
> patchwork::wrap_plots(plist,ncol = 5,nrow = 1,guides = "collect")
Error: Only know how to add ggplots and/or grobs
class一下里面的元素,会发现生存曲线的对象类型跟ggplot对象不太一样。
> class(plist[[1]])
[1] "ggsurvplot" "ggsurv" "list"
而且ggsurvplot对象不能直接变成ggplot对象
> as_ggplot(plist[[1]])
Error in gList(...) : only 'grobs' allowed in "gList"
这怎么办呢?
想了一下,ggsurvplot本身也是一个list,ggplot对象也是list,两个list之间应该会有一些相似的元素。打开一个ggsurvplot对象看一下,可以看到里面包含了一个ggplot对象

那接下来的事情就很简单了,在原来的plist[[1]]里面再取一层,把plot这个object取出来,就可以了。
小试一下:
> tmp <- list()
> tmp[[1]] <- plist[[1]][["plot"]]
> tmp[[2]] <- plist[[2]][["plot"]]
> pdf(file="./3_survival/survival.pdf",
+ family = "Times",width = 12,height = 6,onefile = F)
> patchwork::wrap_plots(tmp,ncol = 3,nrow = 2,guides = "collect")
> dev.off()
RStudioGD
2
到这里这个问题就解决了!
网友评论