基于ggplot2的RNA-seq轉錄組可視化:總述和分文目錄

本系列文章的目的:我將首先簡要介紹一下ggplot2的基本思路,然后使用前面介紹的TCGA數據模仿articles中的圖片進行數據可視化。

其他文章一覽:
從TCGA數據庫下載并整合清洗高通量腫瘤表達譜-臨床性狀數據
TCGA數據整合后進行DESeq2差異表達分析和基于R的多種可視化
TCGA數據差異分析后生存分析(批量單因素cox回歸/Lasso篩選,多因素cox建模,時間依賴ROC曲線及KM plot可視化)
TCGA轉錄組差異分析后多種基因功能富集分析:從GO/KEGG到GSEA和GSVA/ssGSEA(含基因ID轉換)

mRNA-seq轉錄組二代測序從raw reads到表達矩陣:上中游分析pipeline
miRNA-seq小RNA高通量測序pipeline:從raw reads,鑒定已知miRNA-預測新miRNA,到表達矩陣【一】
miRNA-seq小RNA高通量測序pipeline:從raw reads,鑒定已知miRNA-預測新miRNA,到表達矩陣【二】

相信大家對ggplot2都不陌生。ggplot2包是R以可視化為專長的特征中不可或缺的一分子。生物醫學數據的可視化一直都是數據闡釋的重要部分,說咱們是業余視覺設計也不為過。鑒于ggplot2的簡單明了和功能強大,目前很多articles中工整美觀的figures均出自它之手。

一、ggplot2繪圖的基本思想

使用ggplot2進行數據可視化是以圖層為基本單位來進行的。繪制圖片的時候使用系列函數進行層層累加,最后得到含有完整圖片的對象。

p <- function1()+function2()+function3()+...
p

ggplot2中函數的大致類別

1. 基礎函數:指定數據。

ggplot(data = , mapping = ): 一般使用本函數指定繪圖的數據,接下來的繪圖和調整函數均默認繼承本函數中提供的數據。data要求數據框,mapping參數需配合aes()函數指定映射。

aes(): 將data中的對象傳遞給mapping參數,作為接下來所有繪圖函數的輸入數據。常見參數有:x, y, fill, color, size, alpha等,分別代表x軸數據,y軸數據,圖形填充分組依據,和線/點上色分組依據等。

2. 繪圖函數:繪圖操作主體。

常用的有:
geom_density()、geom_violin()、geom_col()、geom_point()、geom_dotplot、geom_boxplot()、geom_smooth()等函數,分別用于繪制密度圖、小提琴圖、條形圖、散點圖/散點圖、箱線圖、回歸擬合線等。

統一的參數有:
inherit.aes = T/F:是否繼承ggplot函數中指定的數據。默認為T。

data, mapping:如果上面參數為F,則需通過這兩個參數另外指定數據。當然也可以直接使用mapping=aes()補充ggplot函數中沒有指定的全局參數,僅用于該函數使用(如ggplot函數只指定了x和y,繪制boxplot時設置geom_boxplot(aes(fill=...))進行分組填充上色。)

color:統一該函數繪圖的點/線/邊框顏色時直接使用。
size:函數繪制內容大小設置。
position:繪圖內容的位置設置。

此外,每個具體的作圖函數都有其單獨的參數,具體可使用help(function)進行查詢,常用的后續實例操作中也會使用講解。

3. 注釋函數

常用的有:
geom_errorbar()、geom_abline()、geom_vline()、geom_hline()、geom_segment()、geom_rect()、geom_tile()、geom_text()、annotate()等,分別用于圖片中誤差棒、對角線、豎直線、橫線、自由線段、方塊/方塊、文字和小范圍自由注釋等。

注釋函數的參數不一,但基本也可以分為 數據設定/坐標設定(如geom_abline的slope和intercept參數分別設定斜線的斜率和截距;geom_segment的x/xend/y/end分別設置線段的起始和結束的坐標位置) 和 樣式調整(如geom_errorbar中width調整誤差棒頂端橫線寬度;注釋線條的函數中linetype調整線條的類型;size調整樣式大小)兩大類。

4. 樣式調整函數

最后可以對ggplot2作出的圖形進行全方面參數的調整:

(1)坐標軸的調整:
xlim()、ylim()調整連續坐標軸可視化的范圍。
xlab()、ylab()設置x、y軸的sub_titles。
scale_x_continuous()、scale_x_discrete()分別設置連續/離散 坐標的刻度breaks和labels(y軸同理)。
ggtitle()可以設置圖片的標題。

(2)繪圖對象顏色的調整:
scale_fill_manual()、scale_fill_gradient()、scale_fill_gradient2()等用于設置填充繪圖對象的顏色:手動設置分組變量所對應的的顏色、和連續變量漸變的顏色。
scale_color_manual()、scale_color_gradient()、scale_color_gradient2()等用于線、點或邊框的顏色。

(3)主題的調整:
已有一些ggplot2預設好的主題可以直接調用,如theme_bw(),theme_gray()等。

theme():該函數功能非常強大,可以對圖片(panel)的背景、分割線、字體大小、x/y軸、圖片的標題(與xlab、ylab、ggtitle功能重合)、圖例(legend)的位置、breaks等進行設置。

(4)圖例的調整:
除了theme()中對圖例可進行許多調整外,scale_color_****()、scale_fill_****()、scale_size_****()、scale_alpha_****()等函數中的name、breaks、labels、limits等參數可以分別對各自主管的圖例類型(如size只負責size的legend,color和fill分別負責點/線,和填充對象的legend)的標題名、圖例刻度、刻度名、展示范圍進行設置。

Optional:部分兼容ggplot2的補充包:

如beeswarm包,可繪制蜂群點圖。
如ggsignif包和ggpubr包,可進行p值和顯著性的注釋。
...

第一個示例

一串較為典型的ggplot2作圖代碼大概就是這樣的:

#generate the data frame to be graphed.
tutorial_df <- data.frame('values'=c(1,2,3,4), 
                          'groups'=c('A','B','C','D'), 
                          'colors'=c('color1','color1','color2','color2'), 
                          'fills'=c('color3','color4','color3','color4'))

#tell ggplot2 how we'll order groups in the x-axis.
tutorial_df$groups <- factor(tutorial_df$groups, levels = c('D','C','B','A'), ordered = T)

#draw the plot.
p <- ggplot(tutorial_df, aes(x=groups, y=values, color=colors, fill=fills))+
  geom_col(width = 0.5, size = 1, linetype = 1)+
  scale_color_manual(values = c('color1'='navy', 'color2'='blue'))+
  scale_fill_manual(values = c('color3'='red', 'color4'='yellow'))+
  xlab('this is x-axis')+ylab('this is y-axis')+
  ggtitle('tutorial picture')+
  theme_gray()+
  theme(panel.grid = element_line(color = 'purple'), plot.title = element_text(hjust = 0.5))
p

將代碼用自然語言翻譯一下:以tutorial_df數據框中的groups列作為x軸分組依據,values列作為y軸值,以colors列作為邊框顏色依據,以fills作為填充顏色依據。然后繪制條形圖,條寬度為0.5,邊框size為1,邊框線為實線。隨后手動設置邊框和填充顏色的種類,設置x軸、y軸小標題以及圖片主題。最后在使用預設主題theme_gray的基礎上,將背景分割線設為紫色,標題設置為居中。

得到的圖片如下,嗯真的很辣眼睛(0_0),但是我想作為第一個示例應該能很清楚地展示每個函數和各個參數的作用。

an ugly tutorial demonstration of ggplot2

注:
知識點來了:對ggplot2分組在坐標軸上的順序進行調整時,需要將dataframe中的相應變量設置成因子型(factor),用levels參數進行排序,隨后的可視化順序就會【按照因子級別從小到大】順序排列。

二、ggplot2在生物醫學文獻中的基礎可視化示例

接下來一系列實例操作對于理解ggplot2的繪圖思路及主要參數應用非常有效!

既然使用了TCGA數據庫獲得了一些基礎的分析結果,那接下來我嘗試模仿一些文獻做一些基礎的數據可視化工作。

獲取數據:

基于第一篇文章從TCGA數據庫下載并整合清洗高通量腫瘤表達譜-臨床性狀數據,我們下載并清洗TCGA數據庫中white人種的LUSC肺鱗癌mRNA-seq轉錄組數據。

隨后根據第二篇文章TCGA數據整合后進行DESeq2差異表達分析和基于R的多種可視化進行了基于DESeq2的差異分析。

在進行可視化實例前,我們假設已經獲得并需要如下對象:
(1)mRNA_exprSet:FPKM expression matrix of genes from cancer/normal tissue.
(2)condition_table:a data frame containing sample type info and IDs of each sample.
(3)clinical_trait:a data frame recording tumor stage, gender and ID info of each sample.
(4)expr_vst:vst-transformed normalized counts matrix of qualified genes processed by DESeq2 which is suitable for data visualization.

可視化實例(點擊藍色字體進入新頁面查看)

(1)測序結果概覽:基因表達量rank瀑布圖,高密度表達相關性散點圖,注釋特定基因及errorbar的表達相關性散點圖繪制

(2)單/多個基因在組間同時展示的多種選擇:分組小提琴圖、分組/分面柱狀圖、單基因蜂群點圖拼圖的繪制

(3)配對樣本基因表達趨勢:優化前后的散點連線圖+拼圖繪制

(4)主成分PCA分析:分析流程+散點及分組核心區域繪制

喜歡的朋友就點個贊吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容