R语言绘图包08--森林图的绘制:forestplot


R语言绘图包系列:


1. 基本用法和参数
forestplot(...)
# S3 method for data.frame
forestplot(x, mean, lower, upper, labeltext, is.summary, ...)

# S3 method for default
forestplot(
  labeltext,
  mean,
  lower,
  upper,
  align,
  is.summary = FALSE,
  graph.pos = "right",
  hrzl_lines,
  clip = c(-Inf, Inf),
  xlab = "",
  zero = ifelse(xlog, 1, 0),
  graphwidth = "auto",
  colgap,
  lineheight = "auto",
  line.margin,
  col = fpColors(),
  txt_gp = fpTxtGp(),
  xlog = FALSE,
  xticks,
  xticks.digits = 2,
  grid = FALSE,
  lwd.xaxis,
  lwd.zero,
  lwd.ci,
  lty.ci = 1,
  ci.vertices,
  ci.vertices.height = 0.1,
  boxsize,
  mar = unit(rep(5, times = 4), "mm"),
  title,
  legend,
  legend_args = fpLegend(),
  new_page = getOption("forestplot_new_page", TRUE),
  fn.ci_norm = fpDrawNormalCI,
  fn.ci_sum = fpDrawSummaryCI,
  fn.legend,
  shapes_gp = fpShapesGp(),
  ...
)

# S3 method for gforge_forestplot
print(x, ...)

# S3 method for gforge_forestplot
plot(x, y, ...)

# S3 method for grouped_df
forestplot(x, labeltext, mean, lower, upper, legend, is.summary, ...)
参数 用法
labeltext 主要是以矩阵或者list形式将数据导入函数,最好以矩阵,因为数据一般都是矩阵的。
mean 均值
lower 95%置信区间下限
upper 95%置信区间上限
align 每列文字的对齐方式,偶尔会用到。如:align=c("l","c","c") l:左对齐r:右对齐c:居中对齐
is.summary 主要的功能是让表格的每一行字体出现差异,从而区分表头。其值主要用TRUE/FALSE进行差异化分配。
graph.pos 定位森林图所在的位置。通过数字来确定为第几列。
hrzl_lines 以list形式设置表中线条的类型、影响范围。Eg:“3”=gpar(lwd=1,columns=1:4,col=’red’)意思就是第3行的线条,宽度为1,线段延伸至第四列。Col指的颜色。
clip x轴的最大最小范围
xlab x轴的标题
zero 森林图中基准线的位置(无效线的横坐标)
graphwidth 森林图在表中的宽度如:graphwidth = unit(.4,"npc")
colgap 列与列之间的间隙宽度,默认是 6 mm,需要用 unit 的形式
lineheight 行的高度,可以是数字,也可以是 unit 的形式
line.margin 行与行之间的间隙的宽度
col 森林图横线以及点的颜色。box:box(点估计值)的颜色line:穿过方块的横线的颜色zero:中间那条基准线的颜色summary:summary中菱形的颜色hrz_lines:表中第一条横线的颜色eg:col=fpcolors(box=’royblue’,line=’darkblue’, summary=’royblue’, hrz_lines=’red’)
txt_gp 设置表格中文本的格式:用gpar进行赋值,其中cex为文本字体大小,ticks为坐标轴大小,xlab为坐标轴文字字体大小。label:表格主体文字的格式ticks:森林图下方的坐标轴的刻度文字格式xlab:定义的x轴标题格式title:标题文字的格式eg:txt_gp=fpTxtGp(label=gpar(cex=1.25), ticks=gpar(cex=1.1), xlab=gpar(cex = 1.2), title=gpar(cex = 1.2))
xticks 横坐标刻度根据需要可随意设置,如:xticks = c(0.5, 1,1.5, 2)
lwd.xaxis X轴线宽
lwd.zero 无效线的宽度
lwd.ci 置信区间线条的宽度(粗细)
lty.ci 置信区间的线条类型
ci.vertices 森林图可信区间两端添加小竖线(TRUE)
ci.vertices.height 设置森林图可信区间两端的小竖线高度,默认是10%行高
boxsize box(点估计值)的大小
mar 图形页边距,如:mar=unit(rep(1.25, times = 4), "cm")
title 添加标题
legend 当同时显示多个置信区间时,需要添加图例
new_page 是否新页
fn.ci_norm box(点估计值)的形状,默认是方块。如:fn.ci_norm="fpDrawDiamondCI":box 类型选择钻石

参考:forestplot: Draws a forest plot

2. 森林图的绘制
library(forestplot)
rs_forest <- read.csv('demo.csv',header = FALSE)
rs_forest
#              V1           V2       V3              V4   V5   V6   V7
# 1         Group Case/Control        p       OR(95%CI)   NA   NA   NA
# 2           Age                                         NA   NA   NA
# 3           <50      127/211 2.43E-11 4.24(2.84~6.66) 4.24 2.84 6.66
# 4         50-59      115/244 4.14E-12   5.48(3.5~9.2) 5.48 3.50 9.20
# 5          >=60      132/237 1.25E-08 2.74(1.96~3.93) 2.74 1.96 3.93
# 6           Sex                                         NA   NA   NA
# 7          Male      323/318 1.00E-15  3.46(2.71~4.5) 3.46 2.71 4.50
# 8        Female       51/374 3.14E-09 4.21(2.69~7.01) 4.21 2.69 7.01
# 9       Smoking                                         NA   NA   NA
# 10          Yes      122/171 2.06E-07 2.56(1.82~3.71) 2.56 1.82 3.71
# 11           No      252/521 1.00E-15 4.16(3.17~5.59) 4.16 3.17 5.59
# 12 Hypertension                                         NA   NA   NA
# 13          Yes      193/207 3.31E-12  3.14(2.31~4.4) 3.14 2.31 4.40
# 14           No      181/485 1.00E-15 3.96(2.95~5.45) 3.96 2.95 5.45
# 15     Drinking                                         NA   NA   NA
# 16          Yes       83/111 2.44E-04 2.42(1.55~4.01) 2.42 1.55 4.01
# 17           No      291/581 1.00E-15 3.83(3.01~4.96) 3.83 3.01 4.96
演示数据集demo的格式
forestplot(labeltext = as.matrix(rs_forest[,c(1:4)]),
           mean = rs_forest$V5, 
           lower = rs_forest$V6, 
           upper = rs_forest$V7, 
           is.summary=c(T,T,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F),
           zero = 1, 
           boxsize = 0.5, 
           lineheight = unit(6,'mm'),
           graphwidth = unit(35,'mm'),
           colgap = unit(2,'mm'),
           lwd.zero = 2,
           lwd.ci = 2,
           col=fpColors(box='#ef233c',summary="#9e2a2b",lines = 'blue1',zero = 'grey'),
           xlab="Odds Ratio",
           lwd.xaxis=2,
           lty.ci = "solid", ci.vertices.height = 0.15,clip=c(1,13),xticks.digits = 6,
           graph.pos = 4)
forestplot(labeltext = as.matrix(rs_forest[,c(1:4)]),
           mean = rs_forest$V5, 
           lower = rs_forest$V6, 
           upper = rs_forest$V7, 
           is.summary=c(T,T,F,F,F,T,F,F,T,F,F,T,F,F,T,F,F),
           graph.pos=4, #为Pvalue箱线图所在的位置
           #定义标题
           title="Hazard Ratio Plot",
           ##定义x轴
           xlab="    <---PCI Better---   ---Medical Therapy Better--->",
           ##根据亚组的位置,设置线型,宽度造成“区块感”
           #hrzl_lines=list("2" = gpar(lwd=1, lineend="butt", columns=c(1:5),col="#99999922"),
           #                "18" = gpar(lwd=1, lineend="butt", columns=c(1:5),col="#99999922")),
           #fpTxtGp函数中的cex参数设置各个组件的大小
           txt_gp=fpTxtGp(label=gpar(cex=1.25),
                          ticks=gpar(cex=1.1),
                          xlab=gpar(cex = 1.2),
                          title=gpar(cex = 1.2)),
           ##fpColors函数设置颜色
           col=fpColors(box="#1c61b6", lines="#1c61b6", zero = "gray50"),
           #箱线图中基准线的位置
           zero=1,
           cex=0.9, lineheight = "auto",
           colgap=unit(8,"mm"),
           #箱子大小,线的宽度
           lwd.ci=2, boxsize=0.5,
           #箱线图两端添加小竖线,高度
           ci.vertices=TRUE, ci.vertices.height = 0.4)
3. 森林图结果解读

(1)森林图中横短线与中线相交表示无统计学意义;
(2)95% CI上下限均>1,即在森林图中,其95% CI横线不与无效竖线相交,且该横线落在无效线右侧时,说明该指标大于竖线代表的结局;
(3)95% CI上下限均<1,即在森林图中,其95% CI横线不与无效竖线相交,且该横线落在无效线左侧时,说明该指标小于于竖线代表的结局。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容