##### cox多因素回归森林图#######
#install.packages("tableone")
library(tableone)
library(survival)
##画森林图的包
library(forestplot)
mul_cox<-coxph(Surv(time, status) ~ ., data = lung)
mul_cox1 <- summary(mul_cox)
colnames(mul_cox1$conf.int)
#mul_cox1$coefficients
##提取HR+95%CI
multi1<-as.data.frame(round(mul_cox1$conf.int[, c(1, 3, 4)], 2))
##提取:HR(95%CI)和P
# ShowRegTable {tableone}
multi2<-ShowRegTable(mul_cox,
exp=TRUE,
digits=2,
pDigits =3,
printToggle = TRUE,
quote=FALSE,
ciFun=confint)
##将两次提取结果合并成表
result <-cbind(multi1,multi2)
##行名转为表格第一列,并给予命名"Characteristics"
result<-tibble::rownames_to_column(result, var = "Characteristics")
## 加上表头信息
result<- rbind(c("Characteristics", NA, NA, NA, "HR(95%CI)","p"),result)
## 画森林图
forestplot(result[,c(1,5,6)], #告诉函数,合成的表格result的第1,5,6列还是显示数字
mean=result[,2], #告诉函数,表格第2列为HR,它要变成森林图的小方块
lower=result[,3], #告诉函数表格第3列为5%CI,
upper=result[,4], #表格第5列为95%CI,它俩要化作线段,穿过方块
zero=1, #告诉函数,零线或参考线为HR=1即x轴的垂直线
boxsize=0.2, #设置小黑块的大小
#graph.pos=2, #森林图应插在图形第2列
graph.pos="right", #森林图应插在图形最右边
hrzl_lines=list("1" = gpar(lty=1,lwd=2),
"2" = gpar(lty=2),
"10"= gpar(lwd=2,lty=1,columns=c(1:3)) ), # 加上横线
graphwidth = unit(.25,"npc"), # 图的宽度
xticks=c(0.5,1,2,3,4,5), # 横轴上数字
is.summary=c(F,F,F,T,T,F,F,F,F), # 突出有统计差异的行(变量)
txt_gp=fpTxtGp(
label=gpar(cex=1),
ticks=gpar(cex=0.8),
xlab=gpar(cex=1),
title=gpar(cex=1.5)), # 调整文字部分字体
lwd.zero=1, # 参考线宽度
xlab="Hazard ratio", # 横轴标签
lwd.xaxis = 3, #横轴线宽
title="Cox regression forest map",
col=fpColors(box ='black',
lines ='blue',
zero = "black"), # 设置颜色
fontsize = 16,
lwd.ci=3, # 置信区间横线宽度
lty.ci=2, # 置信区间横线类型
ci.vertices =T,
ci.vertices.height=0.2,
clip=c(0.1,8),
ineheight=unit(8, 'mm'),
line.margin=unit(8, 'mm'),
colgap=unit(6, 'mm')
)