R语言用patchwork对ggsurvplot进行排序

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对象


ggsurvplot对象的内部元素

那接下来的事情就很简单了,在原来的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 

到这里这个问题就解决了!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容