双线火山图(Dual-line volcano plot)
是一种用于可视化差异表达分析结果的图表。它通常用于展示基因或蛋白质在两个或多个条件之间的表达差异,并结合统计学检验的结果。
双线火山图的横轴表示差异表达的水平,通常是通过计算统计学上的指标(如t-检验、ANOVA等)得到的p值或调整后的p值(如FDR、Bonferroni等)。纵轴表示表达量的对数变换,常使用基于2的对数(log2)。
在双线火山图中,每个数据点代表一个基因或蛋白质,它的横坐标位置反映了它的差异表达水平的显著性程度,纵坐标位置则反映了它的表达量的相对变化大小。通常,显著性水平较低(较小的p值)的点会在图上较远离0点,表示其差异表达更显著;而纵坐标较高(较大的对数变换值)的点表示其表达量的变化较大。
双线火山图的主要特点是将差异表达的统计显著性和生物学上的重要性结合在一起,帮助研究人员在大量差异表达基因中筛选出具有生物学意义的目标。通过设定合适的差异表达阈值和显著性水平,可以在图中直观地识别出显著差异表达的基因或蛋白质,进一步进行功能注释和生物通路分析等。
双线火山图在生物医学研究中被广泛应用,特别是在基因组学、转录组学和蛋白质组学等研究领域。它提供了一种直观和简洁的方式来可视化差异表达分析结果,帮助研究人员快速发现和理解基因或蛋白质的差异表达模式。
rm(list = ls())
setwd("D:")
library(RColorBrewer)
library(ggplot2)
# 生成双曲线所需数据
## 设置foldchange,pvalue阈值
log2fd = 0.25
p = 0.05
fun <- function(a){
input = seq(0.0001,a,0.0001)
y = 1/(input) + (-log10(p))
df1 = data.frame(x = input+log2fd,y = y)
df2 = data.frame(x = -(input+log2fd),y = y)
res <- rbind(df1,df2)
return(res)
}
df_line <-fun(3)
head(df_line)
## 数据准备
df <- read.csv("df.csv",row.names = 1)
#确定是上调还是下调,用于给图中点上色
## 新增一列x对应曲线上的值
## 反函数左加右减 上加下减
df$line = ifelse(df$log2fd>0, (1/(df$log2fd-log2fd)) + (-log10(p)), (1/(-df$log2fd-log2fd)) + (-log10(p)))
##确定是上调还是下调,用于给图中点上色
df$threshold = factor(ifelse(-log10(df$P_value) > df$line & abs(df$log2fd) >= 0.25, ifelse(df$log2fd >= 0.25 ,'Up','Down'),'NoSignifi'),levels=c('Up','Down','NoSignifi'))
df$gene <- row.names(df) #添加一列基因名,以便备注
library(ggrepel) #标签用
ggplot()+
geom_point(aes(x=log2fd,y= -log10(P_value), color=threshold),df)+
scale_color_manual(values=c("#FC4E2A","#4393C3","#00000033"))+
geom_line(aes(x=x,y=y),df_line)+
ylim(0,10)+
xlim(-2.5,+2.5)+
theme_classic()