【R语言】——火山图绘制
创作时间:
作者:
@小白创作中心
【R语言】——火山图绘制
引用
CSDN
1.
https://blog.csdn.net/weixin_54004950/article/details/128698464
火山图(volcano plot)是生物信息学中常用的可视化工具,用于展示基因表达差异分析的结果。本文将详细介绍如何使用R语言绘制火山图,包括数据准备、R包加载、数据处理以及具体的绘图步骤,并附有代码示例和图表展示。
一、什么是火山图?
火山图(volcano plot)是散点图的一种,它将统计测试中的统计显著性量度(如p-value、FDR)和变化幅度相结合,从而可以快速直观地识别那些变化幅度较大且具有统计学意义的数据点(基因、代谢物、微生物等)。是一种单变量统计分析方法,常应用于转录组、基因组、蛋白质组、代谢组等统计数据分析。其每个点代表一个检测到的基因/代谢物/微生物等。
二、火山图绘制
1. 数据准备
数据输入格式(xlsx格式):
- gene_name: 基因的名字
- FC:基因差异倍数(fold change),即一个基因在一组样本表达量均值除以其在另一组样本中的表达量均值。大于1表示上调,小于1表示下调。
- log2FC:即Log2(fold change)火山图中横坐标的变量,将“fold change”进行了log2转化后,获得的数据中正数为上调的基因/负数为下调的基因,这样就可以使火山图两边对称分布(即左侧表下调/右侧表上调)。筛选标准默认为|log2FC| ≧1。
- PValue:即P-value,统计学根据显著性检验方法所得到的一个衡量值,一般以P < 0.05为显著,P <0.01为极显著,其含义是样本间的差异由抽样误差所致的概率小于0.05 或0.01。
- FDR(false discovery rate):是根据假设检验的P-value进行校正而得到,通常计算FDR采用Benjamini-Hochberg方法(简称BH法)。FDR<0.05表示容许数据中存在至多5%假阳性率。以转录组为例,转录组分析并不是针对一个或几个转录本进行分析,是对一个样品中所转录表达的所有转录本进行分析。这样一个样品当中有多少转录本,就需要对多少个转录本进行假设检验。这样做成千上万次检验,本身就会引入假阳性结果,因此需要进行多重假设检验校正,如FDR、adjusted P-value等。(adjusted P-value, q-value, FDR一般代表相同的含义,都是多重假设检验校正后的P-value,区别在于校正算法的不同)
- -log10FDR:FDR数值越小统计越显著,-log10FDR转换后则反过来,数值越大越显著。
- -log10PValue:PValue数值越小统计越显著,-log10PValue转换后则反过来,数值越大越显著。
差异表达基因筛选:
将log2FC≧1、且p<0.05的基因标记为:差异显著“上调”基因;
将log2FC≤-1、且p<0.05的基因标记为:差异显著“下调”基因;
剩下的基因标记为:差异不显著基因。
2. R包加载、数据导入及处理
###下载包###
install.packages("ggrepel")
install.packages("ggplot2")
install.packages("openxlsx")
###加载包###
library(ggplot2)
library(ggrepel)
library(openxlsx)
###导入数据###
remove(list = ls()) #清除 Global Environment
getwd() #查看当前工作路径
setwd("C:/Rdata/jc") #设置需要的工作路径
list.files() #查看当前工作目录下的文件
data = read.xlsx("volcano.xlsx",sheet= "单组火山图1",sep=',') #数据中的log10FDR和log10PValue列都已乘以“-1”
#data = read.table(file='C:/Rdata/jc/volcano.xlsx',header=TRUE,sep=',')
colnames(data) <- c("gene_name", "FC", "log2FC", "PValue", "FDR", "log10FDR","log10PValue") #重新命名行名
head(data)
###数据处理——根据FDR进行差异基因筛选###
cut_off_FDR =0.05 #设置FDR的阈值
cut_off_log2FC =1 #设置log2FC的阈值
data$Sig = ifelse(data$FDR < cut_off_FDR & #根据阈值筛选差异显著的上下调基因,与差异不显著的基因
abs(data$log2FC) >= cut_off_log2FC, #abs绝对值
ifelse(data$log2FC > cut_off_log2FC ,'Up','Down'),'no')
data = data.frame(data)
table(data$Sig) #查看数据统计情况
3. 火山图绘制
###绘图——基础火山图###
p1 <- ggplot(data, aes(x =log2FC, y=log10FDR, colour=Sig)) + #x、y轴取值限制,颜色根据"Sig"
geom_point(alpha=0.65, size=2) + #点的透明度、大小
scale_color_manual(values=c("#546de5", "#d2dae2","#ff4757")) + xlim(c(-30, 30)) + #调整点的颜色和x轴的取值范围
geom_vline(xintercept=c(-cut_off_log2FC,cut_off_log2FC),lty=4,col="black",lwd=0.8) + #添加x轴辅助线,lty函数调整线的类型:"twodash"、"longdash"、"dotdash"、"dotted"、"dashed"、"solid"、"blank"
geom_hline(yintercept = -log10(cut_off_FDR), lty=4,col="black",lwd=0.8) + #添加y轴辅助线
labs(x="log2FC", y="-log10FDR") + #x、y轴标签
ggtitle("单组火山图") + #标题
theme_bw() + # 主题,help(theme)查找其他个性化设置
theme(plot.title = element_text(hjust = 0.5),
legend.position="right",
legend.title = element_blank()
)
p1 #出图
添加基因名标记
p2 <- p1 + geom_text_repel(
data = subset(data, data$FDR < cut_off_FDR & abs(data$log2FC) >= cut_off_log2FC),# 可以设置跟上面不同的阈值,用数值替换即可
aes(label = gene_name), size = 3,
box.padding = unit(0.5, "lines"),
point.padding = unit(0.8, "lines"), segment.color = "black", show.legend = FALSE )
p2 #出图
添加差异最显著的上调和下调的前几个基因
#下载与加载包#
install.packages("dplyr")
install.packages("gt")
library(dplyr) # 用于数据处理
library(gt) # 制作表格
#数据预处理——上下调合并绘制同一类型标签框#
top_20 <- bind_rows( #分别筛选差异显著前10个的上下调基因,并合并两组数值进行绘图
data %>%
filter(Sig == 'Up') %>%
arrange(FDR, desc(abs(log2FC))) %>%
head(10),
data %>%
filter(Sig == 'Down') %>%
arrange(FDR, desc(abs(log2FC))) %>%
head(10)
)
top_20 %>% gt() #将数据制成表
#绘图——添加基因标签框图#
p4 <- p1 +
geom_label_repel(data = top_20,
aes(log2FC, log10FDR, label = gene_name),
size = 3, fill="#CCFFFF")
p4
将上下调基因分开绘制各自的标签框类型
Up_top_10 =( #筛选差异显著上调的前10个Gene
data %>%
filter(Sig == 'Up') %>%
arrange(FDR, desc(abs(log2FC))) %>%
head(10)
)
Up_top_10 %>% gt() #数据制成表
Down_top_10 = ( #筛选差异显著下调的前10个Gene
data %>%
filter(Sig == 'Down') %>%
arrange(FDR, desc(abs(log2FC))) %>%
head(10)
)
Down_top_10 %>% gt() #数据制成表
#绘图——分别绘制相应类型的标签框#
p5 <- p1 +
geom_label_repel(data = Up_top_10,
aes(log2FC, log10FDR, label = gene_name),
size = 3, fill="#CCFFFF",
alpha = 0.65, color = "black")+
geom_label_repel(data = Down_top_10,
aes(log2FC, log10FDR, label = gene_name),
size = 3, fill="#FFCCCC",
alpha = 0.65, color = "black")
p5
将筛选的差异显著的点加粗和用不同颜色标记
p6 <- p5+geom_point(data=Up_top_10,aes(log2FC, log10FDR),
color="#CCCCFF",size=3.5,alpha=1)+
geom_point(data=Down_top_10,aes(log2FC, log10FDR),
color="#FFCCCC",size=3.5,alpha=1)
p6
热门推荐
冬季养生防白发,营养和减压双管齐下
白发治不好?可能是你太卷了!
郑州思念食品厂的职场文化揭秘:从品牌建设到员工发展
郑州思念食品厂职业健康管理引热议
走,去沈阳张氏帅府
奉系第二号人物张作相,为人厚重,早年孤苦晚年奢侈,但大节不亏
龙年头像设计攻略:AI制作+元素解析+人群推荐
探秘德国国民小吃:咖喱香肠
德国人到底有多爱香肠
经期头痛中药治疗
飞蝗嗅觉机制破解,助力生态保护
经前头疼的治疗方法
新春“氛围组”成员年宵花怎么选?先来认识下它们→
新春年宵花选购指南:10种热门花卉的寓意与养护要点
新春“氛围组”成员年宵花怎么选?看这里→
长春文庙:穿越历史,寻找那些你不知道的故事
赓续城市文脉的长春“大屋檐” 缘何如此珍贵?
“花”式浪漫,遇见长春的诗意春天
原神胡桃攻略:武器与圣遗物搭配指南
春节探亲礼仪全攻略:让你成为最受欢迎的客人
春节拜年攻略:如何优雅地向长辈拜年?
春节礼仪教育:让孩子学会尊重长辈
手机听筒如何清理?四种实用方法轻松应对
长春伪满皇宫博物馆游玩攻略,看这一篇就够了
车祸过后的护理指南
德国饮食文化全方位解读
德国饮食文化全方位解读
2025年学雷锋纪念日:从学习到实践,新时代雷锋精神的创新传承
不同音乐类型英语词汇表达
有效拦截陌生电话的实用技巧与建议,保护隐私安全享受安宁生活