R语言|forest plot

news/2025/1/31 9:19:12/

R|foestplot包绘制森林图forest plot

小编今天给大家分享的是foestplot包绘制组间差异比对图(森林图forest plot)相关方法。森林图(forestplot)常用于Meta分析,可用于表达统计指标的效应量和置信区间。

绘图示例

#安装包
#install.packages("forestplot")
#加载包
library(forestplot)
#输入文件
inputFile="input.txt"
#输出文件
outFile="forest.pdf"
#设置路径
setwd("G:\\RStudio\\38.forest") 
#读取文件数据
rt=read.table(inputFile,header=T,sep="\t",row.names=1,check.names=F)

在这里插入图片描述

#绘制森林图函数
gene=rownames(rt)#读取基因列
hr=sprintf("%.3f",rt$"HR")#获取HR列取小数点后3位
hrLow=sprintf("%.3f",rt$"HR.95L")#获取95%置信区间取HR.95L列小数点后3位
hrHigh=sprintf("%.3f",rt$"HR.95H")#获取95%置信区间HR.95H列小数点后3位
pVal=ifelse(rt$pvalue<0.001, "<0.001", sprintf("%.3f", rt$pvalue)) #获取P值
Hazard.ratio=paste0(hr,"(",hrLow,"-",hrHigh,")")#合并为一个数据集
​
#输出图形
#pdf(file=outFile, width = 6, height =4.5)
n=nrow(rt)
nRow=n+1
ylim=c(1,nRow)
layout(matrix(c(1,2),nc=2),width=c(3,2))
​
#森林图左边的基因信息
xlim = c(0,3)par(mar=c(4,2,1.5,1.5))plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")#axes=F表示禁止生成坐标轴text.cex=0.8 #放大0.8text(0,n:1,gene,adj=0,cex=text.cex)#显示基因列信息
text(1.5-0.5*0.2,n:1,pVal,adj=1,cex=text.cex);text(1.5-0.5*0.2,n+1,'pvalue',cex=text.cex,font=2,adj=1)#显示pvalue列信息text(3,n:1,Hazard.ratio,adj=1,cex=text.cex);text(3,n+1,'Hazard ratio',cex=text.cex,font=2,adj=1,)#显示计算出的Hazard ratio列信息

在这里插入图片描述

#绘制森林图
par(mar=c(4,1,1.5,1),mgp=c(2,0.5,0))
xlim = c(0,max(as.numeric(hrLow),as.numeric(hrHigh)))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="Hazard ratio")#设置x轴的标题
arrows(as.numeric(hrLow),n:1,as.numeric(hrHigh),n:1,angle=90,code=3,length=0.03,col="darkblue",lwd=2.5)
abline(v=1,col="black",lty=2,lwd=2) #添加中线,设置中线的位置,颜色,类型,宽度
boxcolor = ifelse(as.numeric(hr) > 1, 'red', 'blue')#设置中线的取值
points(as.numeric(hr), n:1, pch = 15, col = boxcolor, cex=1.5)#pch表示点的样式,设置点的大小,颜色
axis(1)
#dev.off()

在这里插入图片描述

完整代码:
library(forestplot)
inputFile="input.txt"
outFile="forest.pdf"
setwd("E:\\forestplot") 
rt=read.table(inputFile,header=T,sep="\t",row.names=1,check.names=F)
gene=rownames(rt)
hr=sprintf("%.3f",rt$"HR")
hrLow=sprintf("%.3f",rt$"HR.95L")
hrHigh=sprintf("%.3f",rt$"HR.95H")
pVal=ifelse(rt$pvalue<0.001, "<0.001", sprintf("%.3f", rt$pvalue)) 
Hazard.ratio=paste0(hr,"(",hrLow,"-",hrHigh,")")pdf(file=outFile, width = 6, height =4.5)
n=nrow(rt)
nRow=n+1
ylim=c(1,nRow)
layout(matrix(c(1,2),nc=2),width=c(3,2))
​
xlim = c(0,3)par(mar=c(4,2,1.5,1.5))plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,xlab="",ylab="")text.cex=0.8 text(0,n:1,gene,adj=0,cex=text.cex)
text(1.5-0.5*0.2,n:1,pVal,adj=1,cex=text.cex);text(1.5-0.5*0.2,n+1,'pvalue',cex=text.cex,font=2,adj=1)text(3,n:1,Hazard.ratio,adj=1,cex=text.cex);text(3,n+1,'Hazard ratio',cex=text.cex,font=2,adj=1,)par(mar=c(4,1,1.5,1),mgp=c(2,0.5,0))
xlim = c(0,max(as.numeric(hrLow),as.numeric(hrHigh)))
plot(1,xlim=xlim,ylim=ylim,type="n",axes=F,ylab="",xaxs="i",xlab="Hazard ratio")
arrows(as.numeric(hrLow),n:1,as.numeric(hrHigh),n:1,angle=90,code=3,length=0.03,col="darkblue",lwd=2.5)
abline(v=1,col="black",lty=2,lwd=2)
boxcolor = ifelse(as.numeric(hr) > 1, 'red', 'blue')
points(as.numeric(hr), n:1, pch = 15, col = boxcolor, cex=1.5)
axis(1)
dev.off()

在这里插入图片描述

END

关注”作图帮“微信公众号,获取更多精彩


http://www.ppmy.cn/news/519679.html

相关文章

R语言逻辑回归分析

Logistic regression为非线性模型&#xff0c;回归系数是通过极大似然估计方法计算所得。响应变量取值为1&#xff08;事件发生&#xff09;或0&#xff08;事件不发生&#xff09;。 1. 数据集载入和划分 ### 数据集载入和划分 library(AER) data() # 查看AER包里面的数据…

R语言使用BOOT重抽样获取回归方程系数95%可信区间(1)

bootstrap自采样目前广泛应用与统计学中&#xff0c;其原理很简单就是通过自身原始数据抽取一定量的样本&#xff08;也就是取子集&#xff09;&#xff0c;通过对抽取的样本进行统计学分析&#xff0c;然后继续重新抽取样本进行分析&#xff0c;不断的重复这一过程N&#xff0…

R语言排序

sort()函数是对向量进行从小到大的排序 rank()函数返回的是对向量中每个数值对应的秩 order()函数返回的值表示位置&#xff0c;依次对应的是向量的最小值、次小值、第三小值……最大值等&#xff08;位置索引&#xff09; arrange()函数&#xff08;需加载dplyr包&#xff…

二次拟合r方_R语言中如何给拟合曲线添加R2和95%置信区间

完整代码&#xff1a; #install.packages("basicTrendline") library(basicTrendline)x c(3.6,4.6,4.7,5.7,6.6,7.5,8.3,9.4,10.1,11.12,13.9,13.5,14.2,13.7,15.6)y c(11,11,12,13,14,15,16,17,18,19,20,21,22,23,25)#自动添加95%置信区间lines and fill colortre…

r语言实现岭回归_R语言回归篇

1.回归的多面性 回归类型 用途 简单线性 个量化的解释变量来预测一个量化的响应变量(一个因变量、一个自变量) 多项式 一个量化的解释变量预测一个量化的响应变量,模型的关系是 n阶多项式(一个预测变量,但同时包含变量的幂) 多元线性 用两个或多个量化的解释变量预测一个量化…

R语言韦布尔(Weibull)分布

韦布尔分布&#xff0c;即韦伯分布&#xff08;Weibull distribution&#xff09;&#xff0c;又称韦氏分布或威布尔分布&#xff0c;是可靠性分析和寿命检验的理论基础。威布尔分布在可靠性工程中被广泛应用&#xff0c;尤其适用于机电类产品的磨损累计失效的分布形式。由于它…

R语言-时间序列实验

R语言-时间序列实验 数据实验目的及内容目的内容 实验1.时间序列的平稳性检验2.时间序列建模分析3.时间模型序列模型预测 数据 数据选取的是2013年某餐饮的销售额。提取链接如下&#xff1a; 链接: link 提取码&#xff1a;1234 实验目的及内容 目的 1&#xff0e; 掌握时间…

R语言卡方检验最全总结

本文首发于公众号&#xff1a;医学和生信笔记&#xff0c;完美观看体验请至公众号查看本文。 医学和生信笔记&#xff0c;专注R语言在临床医学中的使用&#xff0c;R语言数据分析和可视化。 卡方检验/列联表资料的卡方检验在临床中非常常见&#xff01; 因为最近又有一批临床数…