敲黑板!!小花教你绘制高颜值的风险森林图!!
点击蓝字 关注我们
敲黑板!!小花教你绘制高颜值的风险森林图!!
许多小伙伴们在做预后分析时候,避免不了要把临床风险相关分析的信息放上去,而往往使用的是就是森林图的形式进行展示。但普普通通的森林图已经满足不了小伙伴们的胃口了,相比较常规的森林图。小花今天在这里教大家一个颜值够高的风险森林图,让你的图片变得与众不同!!那么跟着小花去学习吧!
我们先看一下数据,小花这里用的自己的示例数据,小伙伴们可以自己根据表达矩阵和临床信息去绘制数据。
数据形式如下:

library(survival)library(survminer)library(forestplot)library(stringr)#绘制风险森林图需要用到以上的包,没有的小伙伴去下载吧model <- coxph(Surv(time, event) ~., data = dat )#对风险的因素数据进行建模ggforest(model)#绘制风险森林图
其实建模和绘制图都是一句话

这个就是风险森林图,但是细心的小花注意到,这个森林图后面的灰色背景,有的小伙伴想去掉,但是小花发现,这里没办法用常规的ggplot2语法去修改颜色。只能把图片导出来用其他软件进行修图。所以,下面小花就教大家一个新的风险森林图,那么,这里需要用到另一个R包forestplot,这里小花在上面代码已经给大家加上去了,接下来就是绘制图。
跟着小花继续往下走吧:
row_names <- list(list("test = 1", expression(test >= 2)))test_data <- data.frame(coef = c(1.59, 1.24),low = c(1.4, 0.78),high = c(1.8, 1.55))#这里的参数可以根据自己需求去设置forestplot(row_names,test_data$coef,test_data$low,test_data$high,zero = 1,cex = 2,lineheight = "auto",xlab = "Lab axis txt")m = summary(model)colnames(m$coefficients)
先看一下基础的森林图:

小伙伴发现这个没有灰色的背景了,其他有关的参数小伙伴可以自行设置。
然后,接下来就是最关键的数据信息了,就是风险值HR以及置信区间的范围。不过不用担心,这些信息我们可以在上述建模的模型中可以提取到。
先开始绘制:
这里我们先添加图上的label列
m = summary(model)colnames(m$coefficients)
结果:

colnames(m$conf.int)

#在这里我们把p值改一下格式,然后加上显著性p = ifelse(m$coefficients[, 5] < 0.001,"<0.001 ***",ifelse(m$coefficients[, 5] < 0.01,"<0.01 **",ifelse(m$coefficients[, 5] < 0.05,paste(round(m$coefficients[, 5], 3), " *"),round(m$coefficients[, 5], 3))))#调出HR和它的置信区间dat2 = as.data.frame(round(m$conf.int[, c(1, 3, 4)], 2))dat2 = tibble::rownames_to_column(dat2, var = "Trait")colnames(dat2)[2:4] = c("HR", "lower", "upper")#需要在图上显示的HR文字和p值dat2$HR2 = paste0(dat2[, 2], "(", dat2[, 3], "-", dat2[, 4], ")")dat2$p = pstr(dat2)#查看一下数据是否是我们需要的

没有问题,我们开始基础画图:

上述就是新的风险森林图,但是小伙伴肯定感觉有点奇怪,我们在加点细节:
这里主要是分类向量,我们在这里是性别和分期,就需要画出来reference,那我们就在数据dat2中添加几行:
dat2$Trait = str_remove(dat2$Trait, "gender|stage")ins = function(x) {c(x, rep(NA, ncol(dat2) - 1))}dat2 = rbind(c("Trait", NA, NA, NA, "HR", "p"),ins("gender"),ins("female"),dat2[1, ],ins("stage"),ins("i"),dat2[2:nrow(dat2), ])for(i in 2:4) {dat2[, i] = as.numeric(dat2[, i])}str(dat2)#查看一下数据

我们在重新绘制图:

这样就大功告成了!小伙伴们有没有心动呢!不过有的一些参数,小伙伴可以自行设置,要多多斟酌代码的含义,这样才能绘制自己想要图片。
小伙伴快去试试绘制自己的风险森林图吧!!
欢迎使用:云生信 – 学生物信息学 (biocloudservice.com)
如果想用服务器可以联系微信:18502195490(快来联系我们使用吧!)

(点击阅读原文跳转)
点一下阅读原文了解更多资讯

