R語言繪圖 | R繪製火山圖 EnhancedVolcano+ggplot

2021-03-02 BioMan
什麼是火山圖?

火山圖其實是一種很形象的叫法,它可以通過關注對象的落點從而直觀地展示該對象的所屬區域。其通常用於展示差異結果,比如RNA-seq差異基因展示。讀懂了「火山」火星噴射的落點橫縱坐標意義,就讀懂了火山圖:

圖片1.png

X軸:Log2 Fold Change, Fold Change指樣本間表達量的差異倍數;取Log2是為了讓差異較大的和差異比較小的數值在視覺上縮小距離  (e.g. 原來2倍的差異等同於1Log2FC)。一般默認取log2FC絕對值大於1為差異基因的篩選標準。

Y軸:-Log(adjust P-value), 對矯正後的P值取負對數(-log);矯正P值為多重假設檢驗矯正過的差異顯著性P值。由於轉錄組測序的差異表達分析是對大量的基因表達值進行獨立的統計假設檢驗會存在假陽性問題,因此在進行差異表達分析過程中,採用了公認的Benjamini-Hochberg校正方法對原有假設檢驗得到的顯著性p值(p-value)進行校正,剔除假陽性。

紅點: p<0.05且log2FC>1的基因; 藍點:p<0.05且log2FC< -1的基因; 灰色點:FC<2,即|log2FC|<1。

R繪製火山圖

下面就進入主題,用R繪製火山圖,我們的教程小白也能看懂哦😊!
R包:Enhanced Volcano Plot的實例操作解說 EnhancedVolcano by Kevin Blighe

1. 安裝
if (!requireNamespace('BiocManager', quietly = TRUE))    install.packages('BiocManager')  BiocManager::install("magrittr")  BiocManager::install('EnhancedVolcano')    BiocManager::install('DESeq2')    BiocManager::install("airway")

2. 加載數據集,先安裝R包airway,magrittr。

為了快速入門及有效展示,我們參考EnhancedVolcano的官方解說,之後會對部分參數解說,調整參數畫出長在自己審美點的火山圖。(因為R包EnhancedVolcano是更新的,如果參數有變,請參照報錯提示修改代碼)

library(EnhancedVolcano)  library(airway)  library(magrittr)  data('airway')  airway$dex %<>% relevel('untrt')

ens <- rownames(airway)library(org.Hs.eg.db)symbols <- mapIds(org.Hs.eg.db, keys = ens, column = c('SYMBOL'), keytype    = 'ENSEMBL')symbols <- symbols[!is.na(symbols)]symbols <- symbols[match(rownames(airway), names(symbols))]rownames(airway) <- symbolskeep <- !is.na(rownames(airway))airway <- airway[keep,]


3. DESeq2篩選差異基因
library('DESeq2')  dds <- DESeqDataSet(airway, design = ~ cell + dex)  dds <- DESeq(dds, betaPrior=FALSE)  res <- results(dds, contrast = c('dex','trt','untrt'))


4. EnhancedVolcano繪製
volcanoplot<-EnhancedVolcano(res,    lab = rownames(res),    x = 'log2FoldChange',    y = 'pvalue')ggsave("volcanoplot.png",volcanolot)

5. 調整繪圖參數

指南中的火山圖過於凌亂,調整參數使火山圖更加簡潔

##收斂結果,會改變log2FC,不改變P指。目的是為了使火山圖res <- lfcShrink(dds, contrast = c('dex','trt','untrt'), res=res, type = 'normal')


#去除P值為NA的基因


#篩選差異顯著基因,由於該實驗中顯著且|log2FC|>1的點太多,我們制定更嚴格的篩選標準,令|log2FC|>2

celltype<-rownames(res[res$padj<0.05&abs(res$log2FoldChange)>2,])head(celltype)p1<-EnhancedVolcano(res,    lab = rownames(res),    selectLab=celltype,    axisLabSize=13,    title="Treat vs Untreat",    subtitle=NULL,    titleLabSize=15,    #caption = paste0('Total = ', nrow(toptable), ' variables'),    captionLabSize=11,    #drawConnectors = T,    #widthConnectors = 0.2,    #colConnectors = 'grey50',    #boxedLabels=T,    labSize=2.5,      x = 'log2FoldChange',    y = 'padj',    xlim = c(-5,5),    pointSize=2,   #shape = c(6, 6, 19, 16),    colAlpha=0.7,    gridlines.major=F,    gridlines.minor=F,    border="full",    borderWidth=1,     #boxedLabels=T,    cutoffLineType="longdash",    cutoffLineCol="red",    legendVisible=F,     pCutoff=0.05,    FCcutoff=2,    #vline=c(-2,2),    xlab = bquote(~log[2]~ 'fold change'),    ylab=bquote(~-log[10]~'adjusted p-value'))
p2<-p1+theme(axis.text.x = element_text(color="black", size=12),axis.text.y = element_text(color="black", size=12),plot.title = element_text(hjust = 0.5))ggsave(p2,file="volcanoplot2.png")



這樣的火山圖是不是錯落有致,簡潔明了,是你想像中的模樣😍。

6. ggplot2繪製火山圖(使上下調顯著差異基因顯示不同的顏色)
res$threshold<-as.factor(ifelse(res$log2FoldChange >= 2,'Up',ifelse(res$padj<0.05 & res$log2FoldChange <= -2,'Down','Not')))res<-data.frame(res)p3<-ggplot(data=res, aes(x=log2FoldChange, y=-log10(padj), colour=threshold, fill=threshold)) +  scale_color_manual(values=c("blue", "grey","red"))+ geom_point(alpha=0.6,size=2) + #xlim(c(-6, 6)) + #ylim(c(0, 300)) + theme_bw(base_size = 12, base_family = "Times") + geom_vline(xintercept=c(-2,2),lty=1,col=c("blue","red"),lwd=0.6)+ geom_hline(yintercept = -log10(0.05),lty=2,col="black",lwd=0.6)+ theme(legend.position="right", panel.grid=element_blank(), legend.title = element_blank(), legend.text= element_text(face="bold", color="black",family = "Times", size=8), plot.title = element_text(hjust = 0.5), axis.text.x = element_text(color="black", size=12), axis.text.y = element_text(color="black", size=12), axis.title.x = element_text(face="bold", color="black", size=12), axis.title.y = element_text(face="bold",color="black", size=12))+ labs(x="log2 (Fold Change)",y="-log10 (p-value)",title="Treat vs Untreat")



來源:https://www.jianshu.com/p/e2a97bdee27e

BioMan主要報導生命科學領域熱點資訊、解讀前沿進展、分享科研資料。我們組建了10餘個交流群,歡迎大家進群交流。添加公眾號博主微信:mBioMan(下方二維碼),邀你進群。溫馨提示:添加博主時,請備註一下研究方向+單位/學校!

相關焦點

  • R繪圖之ggplot2-散點圖(一)
    (包括處理重疊圖形、添加擬合線等)一、目錄使用默認設置之外的點形與顏色將連續型變量映射到點的顏色與大小上處理重疊圖形添加回歸模型擬合線添加模型係數向散點圖添加邊際地毯二、繪圖1.如何使用默認設置之外的點形與顏色   首先我們繪製一張基礎的散點圖
  • R繪圖:一文了解ggplot2顏色的設置
    R繪圖往期回顧:ggplot2繪圖學習 兩個連續性變量ggplot2繪圖學習:單變量+繪圖背景R繪圖
  • R語言繪製動態圖
    直接上代碼方法一:library(magick)library(ggplot2)library(gganimate)library(ggthemes)library(gapminder)View(gapminder)table(gapminder$year)for (i in 1:length(unique(gapminder$year))) { ggplot(data = gapminder[gapminder$year == as.numeric(names(table
  • 如何用R繪製精美的散點圖
    R可以繪製出很棒的統計圖形,之前我們介紹了用R繪製柱狀圖。今天,小編帶著小夥伴們一起來了解下散點圖的繪製。小編自己看代碼的時候也覺得枯燥乏味,看圖片比看代碼輕鬆多了。所以我們先上圖。上圖就是通過R繪製出的散點圖,看起來也很漂亮。那麼,這種散點圖是如何繪製的呢?感興趣的小夥伴就請繼續看下面的代碼。
  • R語言 | 小提琴圖
    比如,我們以R語言中的內置數據集iris為例,比較幾種不同花的花萼長度(Sepal.Length),通常會使用下圖。箱式圖能夠提供中位數、四分位數等的信息,但是不能直觀的表現出具體數據分布情況。而小提琴圖則能夠彌補這一點,而且小提琴圖比箱式圖要美觀不少。雖然目前小提琴圖不如箱式圖使用普遍,但是越來越多的文章中出現小提琴圖。使用小提琴圖會使文章增色不少。
  • R語言 | R語言繪製抖動散點圖和蜂群圖
    語言自帶的一個小數據集,展示使用ggplot2包繪製兩種特殊的散點統計圖,抖動散點圖(jitter plot)和蜂群圖((beeswarm plot)。這兩種類型的散點圖在文獻中都很常見,例如生物學研究中常使用它們展示基因定量表達的信息。除了R語言作圖外,本文還比較了二者各自的特點,並在最後簡單列舉了它們與其它類型的統計圖如箱線圖、提琴圖等的區別和聯繫,以及適用場合。 multcomp包的cholesterol數據集,來自某項臨床研究,記錄了50個患者接受降膽固醇藥物治療後的療效。
  • R語言 | 繪製環圖示例
    圓環圖嘛,當然就是圓環狀的統計圖啦。它主要由柱形圖或餅圖轉化而來,將原本一個個豎直的柱子彎曲成圓環展示,或者將餅圖轉換為空心狀圓環。本篇白魚小編將使用R語言ggplot2包,通過幾個示例分享這類圓環圖的繪製方法。
  • R語言中使用par函數在同一繪圖區中繪製多幅圖
    par函數概述在R繪圖時,有時我們想在一個繪圖區中同時繪製多幅圖。在R語言中可以有多個函數來實現此要求。這裡先介紹一下繪圖參數par函數的使用。R中的par()函數可以將繪圖區分割成規則的幾個部分。多圖環境用參數mfrow或參數mfcol來設定,如:par(mforw=c(3,2))則是在同一繪圖區中繪製3行2列共6個圖形,而且是先按行繪製,即繪製完第1行的2個圖形後,再繪製第2行的2個圖形,最後是第3行的2個圖形。同理,par(mfcol=c(3,2))也是繪製3行2列共6個圖形,與上面不同的是,先按列繪製。
  • R繪圖之散點圖:9氣泡圖的繪製
    氣泡圖是可以展示三個變量或者4個變量之間關係的數據圖表。
  • 整理了一些自己可能會用到的R包~20210125更新
    更新於2021年1月25號gtable生信菜鳥團 公眾號分享的文章 R包:gtable包用於處理ggplot2圖像ggrgl畫三維圖 在 微生物生信 看到的推文 ggrgl:用ggplot做3D圖表rayshader公眾號有人留言說這個包做ppt很好用,我查了一下,大體看了一眼幫助文檔
  • R語言之plot繪圖函數的使用
    R有強大的繪圖功能,plot()函數是一種常用的繪圖函數,用其可以繪製散點圖、曲線圖等。plot函數的語法格式R語言中plot()函數的基本格式如下:plot(x,y,...)主要參數的含義如下:(1)type為一個字符的字符串,用於給定繪圖的類型,可選的值如下:"p":繪點(默認值);"l":繪製線;"b":同時繪製點和線;"c":僅繪製參數
  • 利用R語言進行層次聚類分析以及繪製樹狀圖
    樹形圖(dendrogram)是表示樹的圖。
  • 使用R語言繪製直方圖
    在本號前面的文章中介紹了R語言中繪製散點圖,折線圖,條形圖,餅圖和箱線圖的方法,有興趣的讀者關注本號後,可以往前看本號的所有文章,本文將介紹在R中繪製直方圖的方法。直方圖概述直方圖(Histogram)又稱柱狀圖,是由一系列高度不等的縱條紋或線段表示的數據分布情況。
  • 柱狀圖繪製,在R中兩行代碼就可以實現
    R可以說是繪製圖形的利器了,簡單幾行代碼,就可以繪製出各種精美的圖形。當然,對於從事科研的小夥伴來說,把辛苦做出來的實驗數據繪製成各種高大上的統計圖形才是至關重要的。今天,小編給大家展示一下用R繪製柱狀圖是多麼簡單!
  • R繪圖應用實例:單因素方差分析ANOVA及繪圖
    本文主要是利用日常實驗數據,嘗試用R進行單因素方差分析並繪製柱形圖。
  • 用R繪製最完整中國地圖
    我們前邊用三篇推文介紹了用R對世界地圖搭配數據的繪製,分別是:用ggplot2包繪製主要地區和城市的疫情格局:用tmap包繪製國家/地區水平的整體情況:如何用R繪製新冠病毒世界格局(二)(附完整代碼)。
  • 用R也可以跑Python了
    但如果你還想來搞點深度學習,整個自然語言處理,那你可還真得用Python。如果你處於交叉領域,很可能就需要兩種語言切換。後果是,寫個for loop還出bug真的是家常便飯。報警!如果你真的想提高你在數據科學領域的能力,這兩種語言你確實都應該學習。不過現在好消息來了!
  • R包ggrepel解決散點圖樣品標籤重疊,方便篩選樣品
    ")或者安裝最新的開發版本:install.packages("devtools", repo="http://cran.us.r-project.org")library(devtools)devtools::install_github("slowkow/ggrepel")geom_text()添加樣品標籤我們先看看geom_text
  • r語言的p值檢驗 - CSDN
    輸入1: rdata = matrix(rnorm(1000* 6, 0, 3), 6) rvar = apply(rdata, 2, var) mean(rvar)結果1: >[1] 8輸入2: var(rvar)結果2: [1] 32=2*81/5輸入3: library(ggplot2)p1 <- ggplot(data.frame(rvar),aes(x=rvar))+geom_histogram(bins=20,aes(y=..density..)