敲黑板!!小花教你绘制高颜值的风险森林图!!






敲黑板!!小花教你绘制高颜值的风险森林图!!

小花  生信果  2023-08-29 19:00:04

点击蓝字 关注我们

敲黑板!!小花教你绘制高颜值的风险森林图!!

许多小伙伴们在做预后分析时候,避免不了要把临床风险相关分析的信息放上去,而往往使用的是就是森林图的形式进行展示。但普普通通的森林图已经满足不了小伙伴们的胃口了,相比较常规的森林图。小花今天在这里教大家一个颜值够高的风险森林图,让你的图片变得与众不同!!那么跟着小花去学习吧!

我们先看一下数据,小花这里用的自己的示例数据,小伙伴们可以自己根据表达矩阵和临床信息去绘制数据。

数据形式如下:

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(快来联系我们使用吧!)



(点击阅读原文跳转)

 点一下阅读原文了解更多资讯