雙線火山圖(Dual-line volcano plot)
是一種用于可視化差異表達(dá)分析結(jié)果的圖表。它通常用于展示基因或蛋白質(zhì)在兩個(gè)或多個(gè)條件之間的表達(dá)差異鲸郊,并結(jié)合統(tǒng)計(jì)學(xué)檢驗(yàn)的結(jié)果。
雙線火山圖的橫軸表示差異表達(dá)的水平,通常是通過(guò)計(jì)算統(tǒng)計(jì)學(xué)上的指標(biāo)(如t-檢驗(yàn)屁魏、ANOVA等)得到的p值或調(diào)整后的p值(如FDR、Bonferroni等)捉腥∶テ矗縱軸表示表達(dá)量的對(duì)數(shù)變換,常使用基于2的對(duì)數(shù)(log2)。
在雙線火山圖中桃漾,每個(gè)數(shù)據(jù)點(diǎn)代表一個(gè)基因或蛋白質(zhì)坏匪,它的橫坐標(biāo)位置反映了它的差異表達(dá)水平的顯著性程度,縱坐標(biāo)位置則反映了它的表達(dá)量的相對(duì)變化大小撬统。通常适滓,顯著性水平較低(較小的p值)的點(diǎn)會(huì)在圖上較遠(yuǎn)離0點(diǎn),表示其差異表達(dá)更顯著恋追;而縱坐標(biāo)較高(較大的對(duì)數(shù)變換值)的點(diǎn)表示其表達(dá)量的變化較大凭迹。
雙線火山圖的主要特點(diǎn)是將差異表達(dá)的統(tǒng)計(jì)顯著性和生物學(xué)上的重要性結(jié)合在一起,幫助研究人員在大量差異表達(dá)基因中篩選出具有生物學(xué)意義的目標(biāo)苦囱。通過(guò)設(shè)定合適的差異表達(dá)閾值和顯著性水平嗅绸,可以在圖中直觀地識(shí)別出顯著差異表達(dá)的基因或蛋白質(zhì),進(jìn)一步進(jìn)行功能注釋和生物通路分析等撕彤。
雙線火山圖在生物醫(yī)學(xué)研究中被廣泛應(yīng)用朽砰,特別是在基因組學(xué)、轉(zhuǎn)錄組學(xué)和蛋白質(zhì)組學(xué)等研究領(lǐng)域喉刘。它提供了一種直觀和簡(jiǎn)潔的方式來(lái)可視化差異表達(dá)分析結(jié)果瞧柔,幫助研究人員快速發(fā)現(xiàn)和理解基因或蛋白質(zhì)的差異表達(dá)模式。
rm(list = ls())
setwd("D:")
library(RColorBrewer)
library(ggplot2)
# 生成雙曲線所需數(shù)據(jù)
## 設(shè)置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)
## 數(shù)據(jù)準(zhǔn)備
df <- read.csv("df.csv",row.names = 1)
#確定是上調(diào)還是下調(diào)睦裳,用于給圖中點(diǎn)上色
## 新增一列x對(duì)應(yīng)曲線上的值
## 反函數(shù)左加右減 上加下減
df$line = ifelse(df$log2fd>0, (1/(df$log2fd-log2fd)) + (-log10(p)), (1/(-df$log2fd-log2fd)) + (-log10(p)))
##確定是上調(diào)還是下調(diào)造锅,用于給圖中點(diǎn)上色
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) #標(biāo)簽用
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()