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