手把手教你学会森林图绘制

大家好,今天我们来讲一讲用R做森林的方法。森林图在R中最方便的实现方法是使用“forestplot”包。

下面进入正题。




01


安装加载包,设置工作路径

install.packages(“forestplot”)

library(forestplot)

setwd(“C:\Users\***”)




02


使用无意义的数据集认识forestplot函数

Forestplot函数需要传入两个数据,第一个数据是显示在图片上的所有文本,包括标签和数字;第二个数据是置信区间的数据,包括均值、左右置信区间坐标。这部分数据必须是数值格式,他们不会以文字出现,只是用来“定位”置信区间的。

下面以测试数据“ceshi0.csv”为例演示一个最原始的森林图。

data <- read.csv(“ceshi0.csv”,header = TRUE) # 读入数据文件

txt <- data[,c(1:3)] # 将数据文件的1-3列设置为“txt”数据框,即文本部分

hr <- data[,c(4:6)] # 将数据文件的4-6列设置为“hr”数据框,即HR数据部分。置信区间数据顺序为:mean、lower、upper,别搞错了。


forestplot(txt,hr) # 作图。至少传入两个参数,前者为文本,后者为HR数据。




03


下面我们使用正式的数据集一步步完成森林图

读入数据和数据的拆分部分同上。

forestplot(txt,hr) #作图,输出如下图。


我们把置信区间图(以下称图)的位置挪到中间来,顺便增加一条zero线。

forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置,可以同时设置多条,如zero = c(0.98, 1.02)

)


forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

           hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

)



也可以任意指定某行是否有横线,指定线占哪几列,并指定线的主题(线型、粗细、颜色)。


forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

          

hrzl_lines = list(“4” = gpar(lty=2),

“5” = gpar(lty=2),

“14” = gpar(lwd=1, columns=c(1,4), col = “red”),

“16” = gpar(lwd=1, columns=2:4, col = “red”)), # 可以对每条线设置位置、宽度占几列、颜色线型等。颜色也可以在颜色集中统一设置。注意引号内的数字是指定有直线的行号,不要担心引号,R可以识别的。


接下来增加两条辅助线,并且设置x轴范围,

forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

           hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

          

           grid = structure(c(0.5,2.5), gp = gpar(col = “black”, lty=2)), #增加一条或=/多条辅助线,并设置辅助线的颜色、线型、粗细

           lty.ci = 1, # HR线(穿过box的直线)的线型,默认为1(实直线)

           clip=c(0,5), # 设置x轴的范围,若置信区间落在设定的范围外,则用箭头表示

           ci.vertices = TRUE, # 穿过box的线段两端是否带下垂线,默认FALSE。

           ci.vertices.height = 0.1, #可是设置线段两端垂线的长度。


可以设置box的类型和大小(颜色可以放在最后统一调节):

forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

           hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

           # hrzl_lines = list(“4” = gpar(lty=2),

           # “5” = gpar(lty=2),

           # “14” = gpar(lwd=1, columns=c(1,4), col = “red”),

           # “16” = gpar(lwd=1, columns=2:4, col = “red”)), # 可以对每条线设置位置、宽度占几列、颜色线型等。颜色也可以在颜色集中统一设置。注意引号内的数字是指定有直线的行号,不要担心引号,R可以识别的。


           grid = structure(c(0.5,2.5), gp = gpar(col = “black”, lty=2)), #增加一条或=/多条辅助线,并设置辅助线的颜色、线型、粗细

           lty.ci = 1, # HR线(穿过box的直线)的线型,默认为1(实直线)

           clip=c(0,5), # 设置x轴的范围,若置信区间落在设定的范围外,则用箭头表示

           ci.vertices = TRUE, # 穿过box的线段两端是否带下垂线,默认FALSE。

           ci.vertices.height = 0.1, #可是设置线段两端垂线的长度。


           fn.ci_norm = fpDrawCircleCI, # box的样式,默认为方块fpDrawCircleCI,summary默认为菱形fpDrawDiamondCI.可选项:fpDrawNormalCI、fpDrawDiamondCI、fpDrawCircleCI、fpDrawPointCI、fpDrawSummaryCI、fpDrawBarCI。

           boxsize = 0.5, # 设置box的大小

)


然后我们为x轴和整个图标增加标题,再手工标记一下x轴的刻度。

forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

           hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

           # hrzl_lines = list(“4” = gpar(lty=2),

           # “5” = gpar(lty=2),

           # “14” = gpar(lwd=1, columns=c(1,4), col = “red”),

         # “16” = gpar(lwd=1, columns=2:4, col = “red”)), # 可以对每条线设置位置、宽度占几列、颜色线型等。颜色也可以在颜色集中统一设置。注意引号内的数字是指定有直线的行号,不要担心引号,R可以识别的。


          grid = structure(c(0.5,2.5), gp = gpar(col = “black”, lty=2)), #增加一条或=/多条辅助线,并设置辅助线的颜色、线型、粗细

           lty.ci = 1, # HR线(穿过box的直线)的线型,默认为1(实直线)

           clip=c(0,5), # 设置x轴的范围,若置信区间落在设定的范围外,则用箭头表示

           ci.vertices = TRUE, # 穿过box的线段两端是否带下垂线,默认FALSE。

           ci.vertices.height = 0.1, #可是设置线段两端垂线的长度。


           fn.ci_norm = fpDrawCircleCI, # box的样式,默认为方块fpDrawCircleCI,summary默认为菱形fpDrawDiamondCI.可选项:fpDrawNormalCI、fpDrawDiamondCI、fpDrawCircleCI、fpDrawPointCI、fpDrawSummaryCI、fpDrawBarCI。

           boxsize = 0.5, # 设置box的大小

          

           xlog=FALSE, # 是否设置x轴为对数坐标轴,默认否。

           xlab = “Lab axis txt”, # x轴标题

           xticks = c(1,2,3,4,4.5,4.75,5), #设置x轴ticks, # 标题

)


最后设置一下七七八八的主题,就完工了。


forestplot(txt,

           hr,

           graph.pos = 3, # 图的位置在第几列,如:3代表图在第2列后第几出现。

           zero = 1.5, # zero线位置.可以同时设置多条,如zero = c(0.98, 1.02),

           is.summary=c(TRUE,rep(FALSE,14),TRUE), #是否突出显示。传入一个长度等于图表行数的向量,下标为TRUE的行会被加粗,且该行上下会添加一条直线,但在未设置颜色时不显示。

           hrzl_lines = gpar(col=”red”), #线的颜色。默认作用于summary上下。

           # hrzl_lines = list(“4” = gpar(lty=2),

           #  “5” = gpar(lty=2),

           #  “14” = gpar(lwd=1, columns=c(1,4), col = “red”),

           #  “16” = gpar(lwd=1, columns=2:4, col = “red”)), # 可以对每条线设置位置、宽度占几列、颜色线型等。颜色也可以在颜色集中统一设置。注意引号内的数字是指定有直线的行号,不要担心引号,R可以识别的。


           grid = structure(c(0.5,2.5), gp = gpar(col = “black”, lty=2)), #增加一条或=/多条辅助线,并设置辅助线的颜色、线型、粗细

           lty.ci = 1, # HR线(穿过box的直线)的线型,默认为1(实直线)

           clip=c(0,5), # 设置x轴的范围,若置信区间落在设定的范围外,则用箭头表示

           ci.vertices = TRUE, # 穿过box的线段两端是否带下垂线,默认FALSE。

           ci.vertices.height = 0.1, #可是设置线段两端垂线的长度。


           fn.ci_norm = fpDrawCircleCI, # box的样式,默认为方块fpDrawCircleCI,summary默认为菱形fpDrawDiamondCI.可选项:fpDrawNormalCI、fpDrawDiamondCI、fpDrawCircleCI、fpDrawPointCI、fpDrawSummaryCI、fpDrawBarCI。

           boxsize = 0.5, # 设置box的大小

          

           xlog=FALSE, # 是否设置x轴为对数坐标轴,默认否。

           xlab = “Lab axis txt”, # x轴标题

           xticks = c(0,1,2,3,4,4.5,4.75,5), #设置x轴ticks

           , # 标题

          

           lwd.xaxis = 2, # 设置x轴宽度

           lwd.zero = 2,# 设置zero线宽度

           lwd.ci = 2,# 设置HR线宽度

           lineheight = unit(0.05, “npc”), # 设置行高。默认为”auto”

           graphwidth = unit(0.4, “npc”),  # 图形宽度,默认自动调节.注意这里的宽度是HR图的宽度,不是整个图的宽度。

           colgap = unit(0.01,”npc”), #列之间的间距,0-1之间的数值,npc表示“占视窗的比例”

           col=fpColors(box=”royalblue”,line=”darkblue”, summary=”royalblue”), # 集中设定颜色


         #  txt_gp = fpTxtGp(label = gpar(fontfamily = “Hershey”)), # 设置字体.建议不要在此处设置字体,因为此处调用的device可能会不支持设置的字体。

          

           )


后台回复“森林图”获取源文件及代码,进行实操吧。



生信发文助手

生信分析服务请加微信:keyan-zhishi2


多点好看,少点脱发

抢沙发

  • QQ号
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

登录

忘记密码 ?

切换登录

注册