专栏名称: EasyCharts
EasyCharts,易图表,我们将定期推送各种数据可视化与分析教程,包括Excel(Power BI)、Origin、Sigmaplot、GraphPad、R、Python、Matlab、Tableau、D3.js等。
目录
相关文章推荐
前端早读课  ·  【第3454期】如何用语音学习编程的 ·  9 小时前  
前端早读课  ·  【开源】TinyEngine开启新篇章,服务 ... ·  昨天  
前端大全  ·  Create React ... ·  5 天前  
前端大全  ·  React+AI 技术栈(2025 版) ·  3 天前  
商务河北  ·  经开区“美•强•优”三重奏 ·  2 天前  
51好读  ›  专栏  ›  EasyCharts

R-forestplot包| HR结果绘制森林图

EasyCharts  · 公众号  · 前端  · 2019-11-13 10:26

正文

本文将介绍根据数据集合的基本信息以及点估计值(置信区间区间)的结果直接绘制森林图的方法。

其中点估计值(置信区间)的结果可以是COX也可以是logistic回归等其他方法的结果,适用范围更广。

数据准备

#载入R包
library(forestplot)
#数据来源:https://www.r-bloggers.com/forest-plot-with-horizontal-bands/
data read.csv("ForestPlotData.csv", stringsAsFactors=FALSE)
#查看数据
head(data)


绘制森林图

2.1 简单森林图

对数据进行部分修改,方便行名和列名字输出

## 构建tabletext,更改列名称,展示更多信息
np ifelse(!is.na(data$Count), paste(data$Count," (",data$Percent,")",sep=""), NA)
 
## The rest of the columns in the table.
tabletext cbind(c("Subgroup","\n",data$Variable),
                   c("No. of Patients (%)","\n",np),
                   c("4-Yr Cum. Event Rate\n PCI","\n",data$PCI.Group),
                   c("4-Yr Cum. Event Rate\n Medical Therapy","\n",data$Medical.Therapy.Group),
                   c("P Value","\n",data$P.Value))

##绘制森林图
forestplot(labeltext=tabletextgraph.pos=3,
         mean=c(NA,NA,data$Point.Estimate),
         lower=c(NA,NA,data$Low), upper=c (NA,NA,data$High),
  boxsize=0.5)

如上图所示基本信息OK了,但是可以在以下几个方面进行优化:

  • 添加线条,区分Subgroup

  • 更改箱线图的宽度,颜色和大小

  • 更改字体大小,更易区分

  • 添加标题和横坐标轴标示


2.2 优化森林图

##  定义亚组,方便后面线条区分
subgps c(4,5,8,9,12,13,16,17,20,21,24,25,28,29,32,33)
data$Variable[subgps] paste("  ",data$Variable[subgps])

forestplot(labeltext=tabletext,
         graph.pos=3, #为Pvalue箱线图所在的位置
         mean=c(NA,NA,data$Point.Estimate),
         lower=c(NA,NA,data$Low), upper=c(NA,NA,data$High),
         #定义标题
          title="Hazard Ratio Plot",
         ##定义x轴
         xlab="    ",
         ##根据亚组的位置,设置线型,宽度造成“区块感”
         hrzl_lines=list("3" = gpar(lwd=1, col="#99999922"),
                         "7" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
                         "15" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
                         "23" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
                         "31" = gpar(lwd=60, lineend="butt", columns=c(2:6), 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 =






请到「今天看啥」查看全文