老司機(jī)帶你三分鐘用ggplot畫出美觀的火山圖!
火山圖相信大家肯定都不陌生,但是怎么畫出美觀而又大方的火山圖可讓很多小伙伴抓耳撓腮了,下面小云化身老司機(jī)帶小伙伴們一同學(xué)習(xí)畫直觀的火山圖吧
?火山圖是散點(diǎn)圖的一種,它將統(tǒng)計(jì)測(cè)試中的統(tǒng)計(jì)顯著性量度(如p value)和變化幅度相結(jié)合,從而能夠幫助快速直觀地識(shí)別那些變化幅度較大且具有統(tǒng)計(jì)學(xué)意義的數(shù)據(jù)點(diǎn)(基因等)。
火山圖常應(yīng)用于轉(zhuǎn)錄組研究,也能應(yīng)用于基因組,蛋白質(zhì)組,代謝組等統(tǒng)計(jì)數(shù)據(jù)?;鹕綀D的橫軸一般是 Log2 (fold change) ,表示兩組樣品之間的差異倍數(shù),點(diǎn)越偏離中心,表示差異倍數(shù)越大。火山圖的縱軸一般是 -Log 10 (P-value) ,表示差異是否具有統(tǒng)計(jì)學(xué)意義,點(diǎn)越靠圖的頂部表示差異越顯著?;鹕綀D的點(diǎn)的顏色和大小也可以表示更多的屬性,如基因的上調(diào)、下調(diào)、無差異、表達(dá)豐度等?;鹕綀D可以幫助我們快速篩選出具有生物學(xué)意義的差異基因,并在圖上標(biāo)記出來。
介紹完了火山圖,為了小伙伴們更加全面的認(rèn)識(shí)火山圖,下面小云說一下它的優(yōu)缺點(diǎn)。
火山圖的優(yōu)點(diǎn):
1.?它可以快速直觀地展示出變化幅度較大且具有統(tǒng)計(jì)學(xué)意義的數(shù)據(jù)點(diǎn),如差異基因等
2.?它可以在圖上標(biāo)記出關(guān)注的基因的名字,方便后續(xù)的分析和驗(yàn)證
3.?它可以用點(diǎn)的顏色和大小表示更多的屬性,如基因的上調(diào)、下調(diào)、表達(dá)豐度等
火山圖的缺點(diǎn):
1.?它只適合展示兩組樣品之間的比較,不能展示多組樣品之間的差異
2.?它不能展示數(shù)據(jù)點(diǎn)之間的相關(guān)性或聚類情況,需要結(jié)合其他圖形如熱圖等
3.?它可能受到數(shù)據(jù)標(biāo)準(zhǔn)化、批次效應(yīng)等因素的影響,導(dǎo)致數(shù)據(jù)存在系統(tǒng)偏差
?任何事物都不會(huì)是十全十美的,火山圖也是如此。不過我們更關(guān)注它的優(yōu)點(diǎn)。下面小云帶大家使用ggplot2包來畫出美觀的火山圖
首先是數(shù)據(jù)展示,前十行的數(shù)據(jù)如下圖所示

下面就是代碼部分啦
rm( list = ls())
gc()
# 設(shè)置工作路徑
setwd('/media/desk16/iyun010')
library(tidyverse)
# 讀取數(shù)據(jù)集
data <- read.csv('data.csv')
# 將p值進(jìn)行-log10轉(zhuǎn)化
volc_plot <- ggplot(data, aes(LogFC, -log10(PValue))) +
??geom_point(size = 0.4) + # 調(diào)整點(diǎn)的大小
??xlab(expression("log"[2]*" fold change")) + # 修飾橫坐標(biāo)的題目
??ylab(expression("-log"[10]*" p-value")) + # 修飾縱坐標(biāo)的題目
??scale_x_continuous(limits = c(-15, 15)) + # 調(diào)整橫坐標(biāo)的范圍
??theme_minimal()
data1 <- data %>%
??mutate(expression = case_when(LogFC >= 1 & PValue < 0.05 ~ "Up-regulated", # 上調(diào)
????????????????????????????????LogFC <= -1 & PValue < 0.05 ~ "Down-regulated", # 下調(diào)
????????????????????????????????TRUE ~ "Unchanged")) # 不變
?
volc_plot1 <- ggplot(data1, aes(LogFC, -log10(PValue))) +
??geom_point(size = 0.4, aes(color = expression)) + # 根據(jù)expression水平進(jìn)行著色
??xlab(expression("log"[2]*" fold change")) + # 修飾x軸題目
??ylab(expression("-log"[10]*" p-value")) + # 修飾y軸題目
??scale_x_continuous(limits = c(-15, 15)) +
??scale_color_manual(values = c("steelblue", "grey", "red"))+ ?# 添加三種顏色
??# theme_minimal
??theme_bw() +
??theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+
??theme(axis.line = element_line(colour = "black"))
?
ggsave('volc.png', plot = last_plot(),width=225, height =150,units = "mm" ,dpi=300)
畫出結(jié)果如下圖所示,是不是很美觀呢

今天的火山圖繪制教程就到這里啦,感興趣的可以找小云討論哦,我們下次見~

