日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

赠你一只金色的眼 - 富集分析和表达数据可视化

發布時間:2025/3/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 赠你一只金色的眼 - 富集分析和表达数据可视化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GOplot包介紹

GOplot包用于生物數據的可視化。更確切地說,該包將表達數據與功能分析的結果整合并進行可視化。但是要注意該包不能用于執行這些分析,只能把分析結果進行可視化。在所有科學領域,由于空間限制和結果所需的簡潔性,切實地去描述事物很難,所以需要將信息進行可視化,使用圖片來傳達信息。精心設計的圖形能在更小的空間提供更多的信息。該包的設想就是能讓用戶快速檢查大量數據,揭示數據的趨勢和找出數據中的模式和相關性。

  • 論文圖表基本規范

  • 學術圖表的基本配色方法

  • 數據可視化基本套路總結

數據可視化可以幫助我們去尋找生物問題的答案,也可以對某一假設進行判斷,甚至可能發現不同的角度來調查不同的問題。并且該包的畫圖函數是以數據的層次結構為基礎進行開發的,從整體數據開始,以所選基因和對應通路的子集結束。

讓我們用例子來具體解釋。

舉例說明

我們調用GOplot自帶的數據,該數據來自于GEO的GSE47067,包含來自兩個組織(腦和心臟)的內皮細胞的轉錄組信息,更多信息詳見Nolan等人的論文https://www.ncbi.nlm.nih.gov/pubmed/23871589,然后將數據進行標準化處理并尋找差異表達的基因,再使用DAVID功能注釋工具(DAVID注釋數據更新比較慢,現在已經不太推薦,建議用去東方,最好用的在線GO富集分析工具和這個只需一步就可做富集分析的網站還未發表就被CNS等引用超過350次進行富集分析, 一文掌握GSEA,超詳細教程)對差異表達基因進行基因注釋(adjusted p-value < 0.05)和功能富集分析。該數據集包含以下五類數據:

名稱描述數據集大小
EC$eset進行標準化后的腦和心臟內皮細胞(3次重復)基因表達量20644 x 7
EC$genelist差異表達基因(adjusted p-value < 0.05)2039 x 7
EC$david用DAVID對差異基因進行功能富集分析的結果174 x 5
EC$gene基因和logFC37 x 2
EC$process選擇的富集生物過程的特征向量7

了解數據格式

我們希望查看差異表達基因的GO富集通路,但在我們開始畫圖之前我們需要提供符合格式需求的數據。通常來說,畫圖所需的數據是自己提供,但該包內有一個函數circle_dat可以幫我們處理數據格式。circle_dat能合并所選擇的基因的功能富集分析結果及其logFC值,主要是用于差異表達基因。circle_dat的使用很簡單,只要讀入兩個數據即可。第一個數據包含功能富集分析結果,至少有四列(功能富集分析類別、通路、基因、adjusted p-value)。第二個數據是所選基因的及其logFC,該數據可以是來源limma統計分析的結果 (生信寶典注:一定注意兩個文件基因的命名方式要一致,比如都是Gene symbol)。我們用實例來看以上提到的數據格式。

#安裝已發布的穩定版本 #install.packages('GOplot') #安裝github上的開發版本 #install_github('wencke/wencke.github.io') #載入包 library(GOplot) #讀入包內自帶的數據 data(EC) #查看功能富集分析結果的數據格式 head(EC$david)## Category ID Term ## 1 BP GO:0007507 heart development ## 2 BP GO:0001944 vasculature development ## 3 BP GO:0001568 blood vessel development ## 4 BP GO:0048729 tissue morphogenesis ## 5 BP GO:0048514 blood vessel morphogenesis ## 6 BP GO:0051336 regulation of hydrolase activity ## Genes ## 1 DLC1, NRP2, NRP1, EDN1, PDLIM3, GJA1, TTN, GJA5, ZIC3, TGFB2, CERKL, GATA6, COL4A3BP, GAB1, SEMA3C, MKL2, SLC22A5, MB, PTPRJ, RXRA, VANGL2, MYH6, TNNT2, HHEX, MURC, MIB1, FOXC2, FOXC1, ADAM19, MYL2, TCAP, EGLN1, SOX9, ITGB1, CHD7, HEXIM1, PKD2, NFATC4, PCSK5, ACTC1, TGFBR2, NF1, HSPG2, SMAD3, TBX1, TNNI3, CSRP3, FOXP1, KCNJ8, PLN, TSC2, ATP6V0A1, TGFBR3, HDAC9 ## 2 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, EFNB2, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 3 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 4 DLC1, ENAH, NRP1, PGF, ZIC2, TGFB2, CD44, ILK, SEMA3C, RET, AR, RXRA, VANGL2, LEF1, TNNT2, HHEX, MIB1, NCOA3, FOXC2, FOXC1, TGFB1I1, WNT5A, COBL, BBS4, FGFR3, TNC, BMPR2, CTNND1, EGLN1, NR3C1, SOX9, TCF7L1, IGF1R, FOXQ1, MACF1, HOXA5, BCL2, PLXND1, CAR2, ACTC1, TBX4, SMAD3, FZD3, SHANK3, FZD6, HOXB4, FREM2, TSC2, ZIC5, TGFBR3, APAF1 ## 5 GNA13, CAV1, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, CDH2, MEIS1, WT1, TGFB2, WARS, PTK2, CERKL, APOE, CXCR4, ANG, SEMA3C, PLCD1, NOS2, MKL2, PLXND1, FIGF, FGF2, PTPRJ, TGFBR2, TBX4, NF1, TBX1, TNNI3, PNPLA6, VASH1, THY1, NUS1, MEOX2, ECSCR, AMOT, HBEGF, FOXC2, FOXC1, HDAC7 ## 6 CAV1, XIAP, AGFG1, ADORA2A, TNNC1, TBC1D9, LEPR, ABHD5, EDN1, ASAP2, ASAP3, SMAP1, TBC1D12, ANG, TBC1D14, MTCH1, TBC1D13, TBC1D4, TBC1D30, DHCR24, HIP1, VAV3, NOS1, NF1, MYH6, RICTOR, TBC1D22A, THY1, PLCE1, RNF7, NDEL1, CHML, IFT57, ACAP2, TSC2, ERN1, APAF1, ARAP3, ARAP2, ARAP1, HTR2A, F2R ## adj_pval ## 1 0.000002170 ## 2 0.000010400 ## 3 0.000007620 ## 4 0.000119000 ## 5 0.000720000 ## 6 0.001171166#查看基因的數據格式 head(EC$genelist)## ID logFC AveExpr t P.Value adj.P.Val B ## 1 Slco1a4 6.645388 1.2168670 88.65515 1.32e-18 2.73e-14 29.02715 ## 2 Slc19a3 6.281525 1.1600468 69.95094 2.41e-17 2.49e-13 27.62917 ## 3 Ddc 4.483338 0.8365231 65.57836 5.31e-17 3.65e-13 27.18476 ## 4 Slco1c1 6.469384 1.3558865 59.87613 1.62e-16 8.34e-13 26.51242 ## 5 Sema3c 5.515630 2.3252117 58.53141 2.14e-16 8.81e-13 26.33626 ## 6 Slc38a3 4.761755 0.9218670 54.11559 5.58e-16 1.76e-12 25.70308

了解了兩個輸入數據格式后,就可以用cirlce_dat函數來生成畫圖數據了。

# 生成畫圖所需的數據格式 circ <- circle_dat(EC$david, EC$genelist)head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966

circ對象有八列數據,分別是

  • category:BP(生物過程),CC(細胞組分)或 MF(分子功能)

  • ID: GO id(可選列, 想使用不基于GO id的功能分析工具,可以不選ID列;這里的ID也可以是KEGG ID)

  • term:GO通路

  • count:每個通路的基因個數

  • gene:基因名 - logFC:每個基因的logFC值

  • adj_pval:adjusted p值,adj_pval<0.05的通路被認為是顯著富集的

  • zscore:zscore不是指統計學的標準化方式,而是一個很容易計算的值,來估計生物過程(/分子功能/細胞成分)更可能降低(負值)或增加(正值)。計算方法就是上調基因的數量減去下調基因的數量再除以每個通路基因數目的平方根

畫圖

GOBar–條形圖

最開始查看數據時,我們希望能從圖中展示盡可能多的通路,并且也希望能找到有價值的通路,因此需要一些參數來評估重要性。條形圖經常用于描述樣本數據,故而我們可以用GOBar函數能快速創建一個好看的的條形圖。

首先直接生成一個簡單的條形圖,橫軸是GO Terms,根據它們的zscore對條進行排序;縱軸是 -log(adj p-value);顏色表示的是zscore,藍色表示z-score是負值,在對應通路基因表達更可能下降,紅色表示z-score是正值,在對應通路基因表達更可能升高。如果需要,可以通過將參數order.by.zscore設置為FALSE來更改順序,在這種情況下條形圖基于它們的顯著性進行排序。

# 生成簡單的條形圖 GOBar(subset(circ, category == 'BP'))

#GOBar(subset(circ, category == 'BP',order.by.zscore=FALSE))

另外,通過更改display參數來根據通路的類別來繪制條形圖。

#根據通路的類別來繪制條形圖 GOBar(circ, display = 'multiple')

添加標題,并使用參數zsc.col更改zscore的顏色。

# Facet the barplot, add a title and change the colour scale for the z-score GOBar(circ, display = 'multiple', title = 'Z-score coloured barplot', zsc.col = c('yellow', 'black', 'cyan'))

條形圖是很常見的,也很容易理解,但我們可以使用氣泡圖來顯示數據更多信息。

GOBubble–泡泡圖

橫軸是zscore;縱軸是-log(adj p-value),類似于條形圖,越高表示富集越顯著;圓的面積與對應通路的的基因數(circ$count)成正比;顏色對應于該通路所對應的類別,綠色生物過程,紅色是細胞組分,藍色是分子功能。可通過輸入?GOBubble查看GOBubble函數的幫助頁面來更改圖片的所有參數。在默認情況下,每個圓標有對應的GO ID,右側也會隨之顯示GO ID和GO term對應關系的表。可通過設置參數table.legend為FALSE來隱藏它。如果要顯示通路描述,請設置參數ID為FALSE。不過由于空間有限和圓重疊,并非所有圓都被標記,只顯示了-log(adj p-value) > 3(默認是5)的通路。

# 生成泡泡圖,并展示-log(adj p-value) > 3 的通路的 GO IDGOBubble(circ, labels = 3)

若給泡泡圖要添加標題,或指定圓圈的顏色并單獨展示各類別的通路并更改展示的GO ID閾值,可添加以下參數:

GOBubble(circ, title = 'Bubble plot', colour = c('orange', 'darkred', 'gold'), display = 'multiple', labels = 3)

通過將參數bg.col設置為TRUE,為通路的類別的背景著色。

GOBubble(circ, title = 'Bubble plot with background colour', display = 'multiple', bg.col = T, labels = 3)

新版本的包中包含一個新函數reduce_overlap,該函數可以減少冗余項的數量,即能刪除基因重疊大于或等于設定閾值的所有通路,只將每組的一個通路作為代表保留,而不考慮GO所有通路的展示。通過減少冗余項的數量,圖的可讀性(如氣泡圖)顯著改善。

# reduce_overlap,參數設置為0.75 reduced_circ <- reduce_overlap(circ, overlap = 0.75) GOBubble(reduced_circ, labels = 2.8)

GOCircle–圈圖展示基因功能富集分析結果

雖然展示所有信息的圖有助于我們發現哪些通路最有意義,不過實際情況還是取決于你想要用數據確認的假設和想法,最重要的通路也不一定是你感興趣的。因此,在手動選擇一組有價值的通路(EC$process)后,我們需要一張圖為我們展示此組特定通路的更詳細的信息。不過通過呈現這些圖能得出一個問題:有時很難解釋zscore提供的信息。畢竟這個計算方法并不通用,如上所示,它僅僅是上調基因的數量減去下調基因的數量除以每個通路基因數目的平方根,用GOCircle得出的圖也強調了這一事實。

圈圖外圈的圓用散點展示了每個通路的基因的logFC值。紅色圓圈表示上調和藍色表示下調。可以使用參數lfc.col更改顏色。這也解釋了為什么在某些情況下,非常重要的通路具有接近零的zscore。zscore為零并不意味著該通路不重要。它只是表明zscore是粗略的衡量標準,因為顯然zscore也沒有考慮生物過程中單個基因的功能水平和激活依賴性。

GOCircle(circ)

nsub參數可是設置數字或字符向量。如果它是字符向量,則它包含要顯示的GO ID或通路;

# 生成特定通路的圈圖 IDs <- c('GO:0007507', 'GO:0001568', 'GO:0001944', 'GO:0048729', 'GO:0048514', 'GO:0005886', 'GO:0008092', 'GO:0008047') GOCircle(circ, nsub = IDs)

如果nsub是數字向量,則該數字定義顯示的個數。它從輸入數據幀的第一行開始。這種可視化僅適用于較小的數據。最大通路數默認為12。雖然通路數量減少,但顯示的信息量會增加。

# 圈圖展示數據前十個通路 GOCircle(circ, nsub = 10)

GOChord–圈圖展示基因和通路之間的關系

GOChord能展示了所選基因和通路之間的關系和基因的logFC。首先需要輸入一個矩陣,可以自己構建0-1矩陣,也可以使用函數chord_dat構建。該函數有三個參數:data,genes和process,其中最后兩個參數至少要有一個參數。然后函數circle_dat將表達數據與功能分析的結果相結合。

條形圖和氣泡圖可以讓您對數據有第一印象,現在,可以選擇了一些我們認為有價值的基因和通路,盡管GOCircle添加了一個層來顯示基因在通路的表達值,但它缺乏單個基因和多個通路之間關系的信息。要弄清楚某些基因是否與多個過程相關聯并不容易。GOChord就彌補了GOCircle的缺陷。生成的數據行是基因,列是通路,“0”表示該基因未被分配到該通路,“1”正相反。

# 找到感興趣的的基因,這里我們以EC$genes為例 head(EC$genes)## ID logFC ## 1 PTK2 -0.6527904 ## 2 GNA13 0.3711599 ## 3 LEPR 2.6539788 ## 4 APOE 0.8698346 ## 5 CXCR4 -2.5647537 ## 6 RECK 3.6926860# 獲得感興趣基因的通路 EC$process## [1] "heart development" "phosphorylation" ## [3] "vasculature development" "blood vessel development" ## [5] "tissue morphogenesis" "cell adhesion" ## [7] "plasma membrane"# 使用chord_dat構建矩陣 chord <- chord_dat(circ, EC$genes, EC$process) head(chord)## heart development phosphorylation vasculature development ## PTK2 0 1 1 ## GNA13 0 0 1 ## LEPR 0 0 1 ## APOE 0 0 1 ## CXCR4 0 0 1 ## RECK 0 0 1 ## blood vessel development tissue morphogenesis cell adhesion ## PTK2 1 0 0 ## GNA13 1 0 0 ## LEPR 1 0 0 ## APOE 1 0 0 ## CXCR4 1 0 0 ## RECK 1 0 0 ## plasma membrane logFC ## PTK2 1 -0.6527904 ## GNA13 1 0.3711599 ## LEPR 1 2.6539788 ## APOE 1 0.8698346 ## CXCR4 1 -2.5647537 ## RECK 1 3.6926860

示例中我們傳遞了兩個參數,若只指定genes參數,則結果是所選基因列表和具有至少一個指定基因的所有過程構建0-1矩陣;若只指定了process參數,則結果是所有基因生成0-1矩陣,這些基因分配給列表中的至少一個過程。要注意只指定genes和process參數可能會導致0-1矩陣很大,從而導致可視化結果混亂。

head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966# Generate the matrix with a list of selected genes chord_genes <- chord_dat(data = circ, genes = EC$genes) head(chord_genes)## heart development vasculature development blood vessel development ## PTK2 0 1 1 ## GNA13 0 1 1 ## LEPR 0 1 1 ## APOE 0 1 1 ## CXCR4 0 1 1

該圖表是為了展示較小的高維數據的子集。主要可以調整兩個參數:gene.order和nlfc。genes參數可指定為’logFC’,‘alphabetical’,‘none’。實際上,我們一般指定genes參數為logFC;nlfc參數是這個函數最重要的參數之一,因為它能處理每個基因有0個或多個logFC值怎么在矩陣呈現。故而我們應該指定參數來避免錯誤。

例如,如果有一個沒logFC值的矩陣,則必須設置nlfc=0;或者在多個條件或批次對基因進行差異表達分析,這時每個基因包含多個logFC值,需要設置nlfc=logFC列數。默認值為“1”,因為認為大多數時候每個基因只有一個logFC值。用space參數定義表示logFC的彩色矩形之間的空間。gene.size參數規定基因名字字體大小,gene.space規定基因名字間的空間大小。

chord <- chord_dat(data = circ, genes = EC$genes, process = EC$process) GOChord(chord, space = 0.02, gene.order = 'logFC', gene.space = 0.25, gene.size = 5)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

可根據logFC值設定gene.order=‘logFC’,對基因按照logFC值進行排序。有時圖片會變得有點擁擠,可以通過使用limit參數自動執行減少顯示的基因或通路的數量。Limit是具有兩個截止值的向量(默認值是c(0,0))。第一個值規定了基因必須分配的最少通路個數。第二個值確定分配給通路的基因個數。

# 僅顯示分配給至少三個通路的基因 GOChord(chord, limit = c(3, 0), gene.order = 'logFC')## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOHeat–熱圖展示基因和通路

GOHeat函數能用熱圖展示基因和通路之間的關系,類似于GOChord。橫向展示生物過程,縱向展示基因。每列被分成小的矩形,顏色一般取決于logFC值。另外具有富集到相似功能通路的基因被聚類。熱圖顏色選擇有兩種模式,具體取決于nlfc參數。如果nlfc = 0,則顏色為每個基因所富集到的通路個數。詳見例子:

# First, we use the chord object without logFC column to create the heatmap GOHeat(chord[,-8], nlfc = 0)

GOHeat(chord[,-8])

在nlfc = 1的情況下,顏色對應于基因的logFC

GOHeat(chord, nlfc = 1, fill.col = c('red', 'yellow', 'green'))

GOCluster–Golden eye

GOCluster功能背后的想法是盡可能多地顯示信息。這是一個例子:

GOCluster(circ, EC$process, clust.by = 'logFC', term.width = 2)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

層級聚類是一種流行的基因表達無監督聚類分析方法,可確保無偏差的將基因按表達模式組合在一起,因此聚在一起的類可能包含多組共調節或功能相關的基因。GOCluster使用核心R中的hclust方法執行基因表達譜的層級聚類。如果要更改距離度量或聚類算法,請分別使用參數metric和clust,得到的樹形圖可在ggdendro的幫助下進行轉換,并能用ggplot2進行可視化。選擇圓形布局,因為它不僅有效而且視覺上吸引人。樹形圖旁邊的第一個圓環代表基因的logFC,它實際上是聚類樹的葉子。如果您對多個對比感興趣,可以修改nlfc參數,默認情況下,它設置為“1”,因此只繪制一個環。logFC值使用用戶可定義的色標(lfc.col)進行顏色編碼;下一個圓環表示分配給基因的通路。為了好看,對通路數目進行了削減,通路的顏色可以使用參數term.col來。依然可以使用?GOCluster來查看如何更改參數。這個函數最重要的參數是clust.by,可以指定它用基因表達模式(‘logFC’,如上圖)或功能類別(‘terms’)進行聚類。

GOCluster(circ, EC$process, clust.by = 'term', lfc.col = c('darkgoldenrod1', 'black', 'cyan1'))## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOVenn–維恩圖

維恩圖可用于檢測各種差異表達基因列表之間的關系,或探索功能分析中多個通路基因的交集。維恩圖不僅顯示重疊基因的數量,還顯示有關基因表達模式的信息(通常是上調,通常是下調或反調節)。目前,最多三個數據集作為輸入。輸入數據至少包含兩列:一列用于基因名稱,一列用于logFC值。

l1 <- subset(circ, term == 'heart development', c(genes,logFC)) l2 <- subset(circ, term == 'plasma membrane', c(genes,logFC)) l3 <- subset(circ, term == 'tissue morphogenesis', c(genes,logFC)) GOVenn(l1,l2,l3, label = c('heart development', 'plasma membrane', 'tissue morphogenesis'))

例如,心臟發育和組織形態發生有22個基因,12個是上調的,10個是下調的。需要注意的重要一點是,餅圖不顯示冗余信息。因此,如果比較三個數據集,則所有數據集共有的基因(中間的餅圖)不包含在其他餅圖中。可使用此工具的shinyapp https://wwalter.shinyapps.io/Venn/, Web工具更具交互性,圓與數據集的基因數量成面積比例,并且可以使用滑塊移動小餅圖,并且具有GOVenn功能的所有選項來改變圖的布局,也可以下載圖片和基因列表。

軟件主頁:https://wencke.github.io/

GOplot包介紹

GOplot包用于生物數據的可視化。更確切地說,該包將表達數據與功能分析的結果整合并進行可視化。但是要注意該包不能用于執行這些分析,只能把分析結果進行可視化。在所有科學領域,由于空間限制和結果所需的簡潔性,切實地去描述事物很難,所以需要將信息進行可視化,使用圖片來傳達信息。精心設計的圖形能在更小的空間提供更多的信息。該包的設想就是能讓用戶快速檢查大量數據,揭示數據的趨勢和找出數據中的模式和相關性。

  • 論文圖表基本規范

  • 學術圖表的基本配色方法

  • 數據可視化基本套路總結

數據可視化可以幫助我們去尋找生物問題的答案,也可以對某一假設進行判斷,甚至可能發現不同的角度來調查不同的問題。并且該包的畫圖函數是以數據的層次結構為基礎進行開發的,從整體數據開始,以所選基因和對應通路的子集結束。

讓我們用例子來具體解釋。

舉例說明

我們調用GOplot自帶的數據,該數據來自于GEO的GSE47067,包含來自兩個組織(腦和心臟)的內皮細胞的轉錄組信息,更多信息詳見Nolan等人的論文https://www.ncbi.nlm.nih.gov/pubmed/23871589,然后將數據進行標準化處理并尋找差異表達的基因,再使用DAVID功能注釋工具(DAVID注釋數據更新比較慢,現在已經不太推薦,建議用去東方,最好用的在線GO富集分析工具和這個只需一步就可做富集分析的網站還未發表就被CNS等引用超過350次進行富集分析, 一文掌握GSEA,超詳細教程)對差異表達基因進行基因注釋(adjusted p-value < 0.05)和功能富集分析。該數據集包含以下五類數據:

名稱描述數據集大小
EC$eset進行標準化后的腦和心臟內皮細胞(3次重復)基因表達量20644 x 7
EC$genelist差異表達基因(adjusted p-value < 0.05)2039 x 7
EC$david用DAVID對差異基因進行功能富集分析的結果174 x 5
EC$gene基因和logFC37 x 2
EC$process選擇的富集生物過程的特征向量7

了解數據格式

我們希望查看差異表達基因的GO富集通路,但在我們開始畫圖之前我們需要提供符合格式需求的數據。通常來說,畫圖所需的數據是自己提供,但該包內有一個函數circle_dat可以幫我們處理數據格式。circle_dat能合并所選擇的基因的功能富集分析結果及其logFC值,主要是用于差異表達基因。circle_dat的使用很簡單,只要讀入兩個數據即可。第一個數據包含功能富集分析結果,至少有四列(功能富集分析類別、通路、基因、adjusted p-value)。第二個數據是所選基因的及其logFC,該數據可以是來源limma統計分析的結果 (生信寶典注:一定注意兩個文件基因的命名方式要一致,比如都是Gene symbol)。我們用實例來看以上提到的數據格式。

#安裝已發布的穩定版本 #install.packages('GOplot') #安裝github上的開發版本 #install_github('wencke/wencke.github.io') #載入包 library(GOplot) #讀入包內自帶的數據 data(EC) #查看功能富集分析結果的數據格式 head(EC$david)## Category ID Term ## 1 BP GO:0007507 heart development ## 2 BP GO:0001944 vasculature development ## 3 BP GO:0001568 blood vessel development ## 4 BP GO:0048729 tissue morphogenesis ## 5 BP GO:0048514 blood vessel morphogenesis ## 6 BP GO:0051336 regulation of hydrolase activity ## Genes ## 1 DLC1, NRP2, NRP1, EDN1, PDLIM3, GJA1, TTN, GJA5, ZIC3, TGFB2, CERKL, GATA6, COL4A3BP, GAB1, SEMA3C, MKL2, SLC22A5, MB, PTPRJ, RXRA, VANGL2, MYH6, TNNT2, HHEX, MURC, MIB1, FOXC2, FOXC1, ADAM19, MYL2, TCAP, EGLN1, SOX9, ITGB1, CHD7, HEXIM1, PKD2, NFATC4, PCSK5, ACTC1, TGFBR2, NF1, HSPG2, SMAD3, TBX1, TNNI3, CSRP3, FOXP1, KCNJ8, PLN, TSC2, ATP6V0A1, TGFBR3, HDAC9 ## 2 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, EFNB2, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 3 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 4 DLC1, ENAH, NRP1, PGF, ZIC2, TGFB2, CD44, ILK, SEMA3C, RET, AR, RXRA, VANGL2, LEF1, TNNT2, HHEX, MIB1, NCOA3, FOXC2, FOXC1, TGFB1I1, WNT5A, COBL, BBS4, FGFR3, TNC, BMPR2, CTNND1, EGLN1, NR3C1, SOX9, TCF7L1, IGF1R, FOXQ1, MACF1, HOXA5, BCL2, PLXND1, CAR2, ACTC1, TBX4, SMAD3, FZD3, SHANK3, FZD6, HOXB4, FREM2, TSC2, ZIC5, TGFBR3, APAF1 ## 5 GNA13, CAV1, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, CDH2, MEIS1, WT1, TGFB2, WARS, PTK2, CERKL, APOE, CXCR4, ANG, SEMA3C, PLCD1, NOS2, MKL2, PLXND1, FIGF, FGF2, PTPRJ, TGFBR2, TBX4, NF1, TBX1, TNNI3, PNPLA6, VASH1, THY1, NUS1, MEOX2, ECSCR, AMOT, HBEGF, FOXC2, FOXC1, HDAC7 ## 6 CAV1, XIAP, AGFG1, ADORA2A, TNNC1, TBC1D9, LEPR, ABHD5, EDN1, ASAP2, ASAP3, SMAP1, TBC1D12, ANG, TBC1D14, MTCH1, TBC1D13, TBC1D4, TBC1D30, DHCR24, HIP1, VAV3, NOS1, NF1, MYH6, RICTOR, TBC1D22A, THY1, PLCE1, RNF7, NDEL1, CHML, IFT57, ACAP2, TSC2, ERN1, APAF1, ARAP3, ARAP2, ARAP1, HTR2A, F2R ## adj_pval ## 1 0.000002170 ## 2 0.000010400 ## 3 0.000007620 ## 4 0.000119000 ## 5 0.000720000 ## 6 0.001171166#查看基因的數據格式 head(EC$genelist)## ID logFC AveExpr t P.Value adj.P.Val B ## 1 Slco1a4 6.645388 1.2168670 88.65515 1.32e-18 2.73e-14 29.02715 ## 2 Slc19a3 6.281525 1.1600468 69.95094 2.41e-17 2.49e-13 27.62917 ## 3 Ddc 4.483338 0.8365231 65.57836 5.31e-17 3.65e-13 27.18476 ## 4 Slco1c1 6.469384 1.3558865 59.87613 1.62e-16 8.34e-13 26.51242 ## 5 Sema3c 5.515630 2.3252117 58.53141 2.14e-16 8.81e-13 26.33626 ## 6 Slc38a3 4.761755 0.9218670 54.11559 5.58e-16 1.76e-12 25.70308

了解了兩個輸入數據格式后,就可以用cirlce_dat函數來生成畫圖數據了。

# 生成畫圖所需的數據格式 circ <- circle_dat(EC$david, EC$genelist)head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966

circ對象有八列數據,分別是

  • category:BP(生物過程),CC(細胞組分)或 MF(分子功能)

  • ID: GO id(可選列, 想使用不基于GO id的功能分析工具,可以不選ID列;這里的ID也可以是KEGG ID)

  • term:GO通路

  • count:每個通路的基因個數

  • gene:基因名 - logFC:每個基因的logFC值

  • adj_pval:adjusted p值,adj_pval<0.05的通路被認為是顯著富集的

  • zscore:zscore不是指統計學的標準化方式,而是一個很容易計算的值,來估計生物過程(/分子功能/細胞成分)更可能降低(負值)或增加(正值)。計算方法就是上調基因的數量減去下調基因的數量再除以每個通路基因數目的平方根

畫圖

GOBar–條形圖

最開始查看數據時,我們希望能從圖中展示盡可能多的通路,并且也希望能找到有價值的通路,因此需要一些參數來評估重要性。條形圖經常用于描述樣本數據,故而我們可以用GOBar函數能快速創建一個好看的的條形圖。

首先直接生成一個簡單的條形圖,橫軸是GO Terms,根據它們的zscore對條進行排序;縱軸是 -log(adj p-value);顏色表示的是zscore,藍色表示z-score是負值,在對應通路基因表達更可能下降,紅色表示z-score是正值,在對應通路基因表達更可能升高。如果需要,可以通過將參數order.by.zscore設置為FALSE來更改順序,在這種情況下條形圖基于它們的顯著性進行排序。

# 生成簡單的條形圖 GOBar(subset(circ, category == 'BP'))

#GOBar(subset(circ, category == 'BP',order.by.zscore=FALSE))

另外,通過更改display參數來根據通路的類別來繪制條形圖。

#根據通路的類別來繪制條形圖 GOBar(circ, display = 'multiple')

添加標題,并使用參數zsc.col更改zscore的顏色。

# Facet the barplot, add a title and change the colour scale for the z-score GOBar(circ, display = 'multiple', title = 'Z-score coloured barplot', zsc.col = c('yellow', 'black', 'cyan'))

條形圖是很常見的,也很容易理解,但我們可以使用氣泡圖來顯示數據更多信息。

GOBubble–泡泡圖

橫軸是zscore;縱軸是-log(adj p-value),類似于條形圖,越高表示富集越顯著;圓的面積與對應通路的的基因數(circ$count)成正比;顏色對應于該通路所對應的類別,綠色生物過程,紅色是細胞組分,藍色是分子功能。可通過輸入?GOBubble查看GOBubble函數的幫助頁面來更改圖片的所有參數。在默認情況下,每個圓標有對應的GO ID,右側也會隨之顯示GO ID和GO term對應關系的表。可通過設置參數table.legend為FALSE來隱藏它。如果要顯示通路描述,請設置參數ID為FALSE。不過由于空間有限和圓重疊,并非所有圓都被標記,只顯示了-log(adj p-value) > 3(默認是5)的通路。

# 生成泡泡圖,并展示-log(adj p-value) > 3 的通路的 GO IDGOBubble(circ, labels = 3)

若給泡泡圖要添加標題,或指定圓圈的顏色并單獨展示各類別的通路并更改展示的GO ID閾值,可添加以下參數:

GOBubble(circ, title = 'Bubble plot', colour = c('orange', 'darkred', 'gold'), display = 'multiple', labels = 3)

通過將參數bg.col設置為TRUE,為通路的類別的背景著色。

GOBubble(circ, title = 'Bubble plot with background colour', display = 'multiple', bg.col = T, labels = 3)

新版本的包中包含一個新函數reduce_overlap,該函數可以減少冗余項的數量,即能刪除基因重疊大于或等于設定閾值的所有通路,只將每組的一個通路作為代表保留,而不考慮GO所有通路的展示。通過減少冗余項的數量,圖的可讀性(如氣泡圖)顯著改善。

# reduce_overlap,參數設置為0.75 reduced_circ <- reduce_overlap(circ, overlap = 0.75) GOBubble(reduced_circ, labels = 2.8)

GOCircle–圈圖展示基因功能富集分析結果

雖然展示所有信息的圖有助于我們發現哪些通路最有意義,不過實際情況還是取決于你想要用數據確認的假設和想法,最重要的通路也不一定是你感興趣的。因此,在手動選擇一組有價值的通路(EC$process)后,我們需要一張圖為我們展示此組特定通路的更詳細的信息。不過通過呈現這些圖能得出一個問題:有時很難解釋zscore提供的信息。畢竟這個計算方法并不通用,如上所示,它僅僅是上調基因的數量減去下調基因的數量除以每個通路基因數目的平方根,用GOCircle得出的圖也強調了這一事實。

圈圖外圈的圓用散點展示了每個通路的基因的logFC值。紅色圓圈表示上調和藍色表示下調。可以使用參數lfc.col更改顏色。這也解釋了為什么在某些情況下,非常重要的通路具有接近零的zscore。zscore為零并不意味著該通路不重要。它只是表明zscore是粗略的衡量標準,因為顯然zscore也沒有考慮生物過程中單個基因的功能水平和激活依賴性。

GOCircle(circ)

nsub參數可是設置數字或字符向量。如果它是字符向量,則它包含要顯示的GO ID或通路;

# 生成特定通路的圈圖 IDs <- c('GO:0007507', 'GO:0001568', 'GO:0001944', 'GO:0048729', 'GO:0048514', 'GO:0005886', 'GO:0008092', 'GO:0008047') GOCircle(circ, nsub = IDs)

如果nsub是數字向量,則該數字定義顯示的個數。它從輸入數據幀的第一行開始。這種可視化僅適用于較小的數據。最大通路數默認為12。雖然通路數量減少,但顯示的信息量會增加。

# 圈圖展示數據前十個通路 GOCircle(circ, nsub = 10)

GOChord–圈圖展示基因和通路之間的關系

GOChord能展示了所選基因和通路之間的關系和基因的logFC。首先需要輸入一個矩陣,可以自己構建0-1矩陣,也可以使用函數chord_dat構建。該函數有三個參數:data,genes和process,其中最后兩個參數至少要有一個參數。然后函數circle_dat將表達數據與功能分析的結果相結合。

條形圖和氣泡圖可以讓您對數據有第一印象,現在,可以選擇了一些我們認為有價值的基因和通路,盡管GOCircle添加了一個層來顯示基因在通路的表達值,但它缺乏單個基因和多個通路之間關系的信息。要弄清楚某些基因是否與多個過程相關聯并不容易。GOChord就彌補了GOCircle的缺陷。生成的數據行是基因,列是通路,“0”表示該基因未被分配到該通路,“1”正相反。

# 找到感興趣的的基因,這里我們以EC$genes為例 head(EC$genes)## ID logFC ## 1 PTK2 -0.6527904 ## 2 GNA13 0.3711599 ## 3 LEPR 2.6539788 ## 4 APOE 0.8698346 ## 5 CXCR4 -2.5647537 ## 6 RECK 3.6926860# 獲得感興趣基因的通路 EC$process## [1] "heart development" "phosphorylation" ## [3] "vasculature development" "blood vessel development" ## [5] "tissue morphogenesis" "cell adhesion" ## [7] "plasma membrane"# 使用chord_dat構建矩陣 chord <- chord_dat(circ, EC$genes, EC$process) head(chord)## heart development phosphorylation vasculature development ## PTK2 0 1 1 ## GNA13 0 0 1 ## LEPR 0 0 1 ## APOE 0 0 1 ## CXCR4 0 0 1 ## RECK 0 0 1 ## blood vessel development tissue morphogenesis cell adhesion ## PTK2 1 0 0 ## GNA13 1 0 0 ## LEPR 1 0 0 ## APOE 1 0 0 ## CXCR4 1 0 0 ## RECK 1 0 0 ## plasma membrane logFC ## PTK2 1 -0.6527904 ## GNA13 1 0.3711599 ## LEPR 1 2.6539788 ## APOE 1 0.8698346 ## CXCR4 1 -2.5647537 ## RECK 1 3.6926860

示例中我們傳遞了兩個參數,若只指定genes參數,則結果是所選基因列表和具有至少一個指定基因的所有過程構建0-1矩陣;若只指定了process參數,則結果是所有基因生成0-1矩陣,這些基因分配給列表中的至少一個過程。要注意只指定genes和process參數可能會導致0-1矩陣很大,從而導致可視化結果混亂。

head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966# Generate the matrix with a list of selected genes chord_genes <- chord_dat(data = circ, genes = EC$genes) head(chord_genes)## heart development vasculature development blood vessel development ## PTK2 0 1 1 ## GNA13 0 1 1 ## LEPR 0 1 1 ## APOE 0 1 1 ## CXCR4 0 1 1

該圖表是為了展示較小的高維數據的子集。主要可以調整兩個參數:gene.order和nlfc。genes參數可指定為’logFC’,‘alphabetical’,‘none’。實際上,我們一般指定genes參數為logFC;nlfc參數是這個函數最重要的參數之一,因為它能處理每個基因有0個或多個logFC值怎么在矩陣呈現。故而我們應該指定參數來避免錯誤。

例如,如果有一個沒logFC值的矩陣,則必須設置nlfc=0;或者在多個條件或批次對基因進行差異表達分析,這時每個基因包含多個logFC值,需要設置nlfc=logFC列數。默認值為“1”,因為認為大多數時候每個基因只有一個logFC值。用space參數定義表示logFC的彩色矩形之間的空間。gene.size參數規定基因名字字體大小,gene.space規定基因名字間的空間大小。

chord <- chord_dat(data = circ, genes = EC$genes, process = EC$process) GOChord(chord, space = 0.02, gene.order = 'logFC', gene.space = 0.25, gene.size = 5)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

可根據logFC值設定gene.order=‘logFC’,對基因按照logFC值進行排序。有時圖片會變得有點擁擠,可以通過使用limit參數自動執行減少顯示的基因或通路的數量。Limit是具有兩個截止值的向量(默認值是c(0,0))。第一個值規定了基因必須分配的最少通路個數。第二個值確定分配給通路的基因個數。

# 僅顯示分配給至少三個通路的基因 GOChord(chord, limit = c(3, 0), gene.order = 'logFC')## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOHeat–熱圖展示基因和通路

GOHeat函數能用熱圖展示基因和通路之間的關系,類似于GOChord。橫向展示生物過程,縱向展示基因。每列被分成小的矩形,顏色一般取決于logFC值。另外具有富集到相似功能通路的基因被聚類。熱圖顏色選擇有兩種模式,具體取決于nlfc參數。如果nlfc = 0,則顏色為每個基因所富集到的通路個數。詳見例子:

# First, we use the chord object without logFC column to create the heatmap GOHeat(chord[,-8], nlfc = 0)

GOHeat(chord[,-8])

在nlfc = 1的情況下,顏色對應于基因的logFC

GOHeat(chord, nlfc = 1, fill.col = c('red', 'yellow', 'green'))

GOCluster–Golden eye

GOCluster功能背后的想法是盡可能多地顯示信息。這是一個例子:

GOCluster(circ, EC$process, clust.by = 'logFC', term.width = 2)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

層級聚類是一種流行的基因表達無監督聚類分析方法,可確保無偏差的將基因按表達模式組合在一起,因此聚在一起的類可能包含多組共調節或功能相關的基因。GOCluster使用核心R中的hclust方法執行基因表達譜的層級聚類。如果要更改距離度量或聚類算法,請分別使用參數metric和clust,得到的樹形圖可在ggdendro的幫助下進行轉換,并能用ggplot2進行可視化。選擇圓形布局,因為它不僅有效而且視覺上吸引人。樹形圖旁邊的第一個圓環代表基因的logFC,它實際上是聚類樹的葉子。如果您對多個對比感興趣,可以修改nlfc參數,默認情況下,它設置為“1”,因此只繪制一個環。logFC值使用用戶可定義的色標(lfc.col)進行顏色編碼;下一個圓環表示分配給基因的通路。為了好看,對通路數目進行了削減,通路的顏色可以使用參數term.col來。依然可以使用?GOCluster來查看如何更改參數。這個函數最重要的參數是clust.by,可以指定它用基因表達模式(‘logFC’,如上圖)或功能類別(‘terms’)進行聚類。

GOCluster(circ, EC$process, clust.by = 'term', lfc.col = c('darkgoldenrod1', 'black', 'cyan1'))## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOVenn–維恩圖

維恩圖可用于檢測各種差異表達基因列表之間的關系,或探索功能分析中多個通路基因的交集。維恩圖不僅顯示重疊基因的數量,還顯示有關基因表達模式的信息(通常是上調,通常是下調或反調節)。目前,最多三個數據集作為輸入。輸入數據至少包含兩列:一列用于基因名稱,一列用于logFC值。

l1 <- subset(circ, term == 'heart development', c(genes,logFC)) l2 <- subset(circ, term == 'plasma membrane', c(genes,logFC)) l3 <- subset(circ, term == 'tissue morphogenesis', c(genes,logFC)) GOVenn(l1,l2,l3, label = c('heart development', 'plasma membrane', 'tissue morphogenesis'))

例如,心臟發育和組織形態發生有22個基因,12個是上調的,10個是下調的。需要注意的重要一點是,餅圖不顯示冗余信息。因此,如果比較三個數據集,則所有數據集共有的基因(中間的餅圖)不包含在其他餅圖中。可使用此工具的shinyapp https://wwalter.shinyapps.io/Venn/, Web工具更具交互性,圓與數據集的基因數量成面積比例,并且可以使用滑塊移動小餅圖,并且具有GOVenn功能的所有選項來改變圖的布局,也可以下載圖片和基因列表。

軟件主頁:https://wencke.github.io/

GOplot包介紹

GOplot包用于生物數據的可視化。更確切地說,該包將表達數據與功能分析的結果整合并進行可視化。但是要注意該包不能用于執行這些分析,只能把分析結果進行可視化。在所有科學領域,由于空間限制和結果所需的簡潔性,切實地去描述事物很難,所以需要將信息進行可視化,使用圖片來傳達信息。精心設計的圖形能在更小的空間提供更多的信息。該包的設想就是能讓用戶快速檢查大量數據,揭示數據的趨勢和找出數據中的模式和相關性。

  • 論文圖表基本規范

  • 學術圖表的基本配色方法

  • 數據可視化基本套路總結

數據可視化可以幫助我們去尋找生物問題的答案,也可以對某一假設進行判斷,甚至可能發現不同的角度來調查不同的問題。并且該包的畫圖函數是以數據的層次結構為基礎進行開發的,從整體數據開始,以所選基因和對應通路的子集結束。

讓我們用例子來具體解釋。

舉例說明

我們調用GOplot自帶的數據,該數據來自于GEO的GSE47067,包含來自兩個組織(腦和心臟)的內皮細胞的轉錄組信息,更多信息詳見Nolan等人的論文https://www.ncbi.nlm.nih.gov/pubmed/23871589,然后將數據進行標準化處理并尋找差異表達的基因,再使用DAVID功能注釋工具(DAVID注釋數據更新比較慢,現在已經不太推薦,建議用去東方,最好用的在線GO富集分析工具和這個只需一步就可做富集分析的網站還未發表就被CNS等引用超過350次進行富集分析, 一文掌握GSEA,超詳細教程)對差異表達基因進行基因注釋(adjusted p-value < 0.05)和功能富集分析。該數據集包含以下五類數據:

名稱描述數據集大小
EC$eset進行標準化后的腦和心臟內皮細胞(3次重復)基因表達量20644 x 7
EC$genelist差異表達基因(adjusted p-value < 0.05)2039 x 7
EC$david用DAVID對差異基因進行功能富集分析的結果174 x 5
EC$gene基因和logFC37 x 2
EC$process選擇的富集生物過程的特征向量7

了解數據格式

我們希望查看差異表達基因的GO富集通路,但在我們開始畫圖之前我們需要提供符合格式需求的數據。通常來說,畫圖所需的數據是自己提供,但該包內有一個函數circle_dat可以幫我們處理數據格式。circle_dat能合并所選擇的基因的功能富集分析結果及其logFC值,主要是用于差異表達基因。circle_dat的使用很簡單,只要讀入兩個數據即可。第一個數據包含功能富集分析結果,至少有四列(功能富集分析類別、通路、基因、adjusted p-value)。第二個數據是所選基因的及其logFC,該數據可以是來源limma統計分析的結果 (生信寶典注:一定注意兩個文件基因的命名方式要一致,比如都是Gene symbol)。我們用實例來看以上提到的數據格式。

#安裝已發布的穩定版本 #install.packages('GOplot') #安裝github上的開發版本 #install_github('wencke/wencke.github.io') #載入包 library(GOplot) #讀入包內自帶的數據 data(EC) #查看功能富集分析結果的數據格式 head(EC$david)## Category ID Term ## 1 BP GO:0007507 heart development ## 2 BP GO:0001944 vasculature development ## 3 BP GO:0001568 blood vessel development ## 4 BP GO:0048729 tissue morphogenesis ## 5 BP GO:0048514 blood vessel morphogenesis ## 6 BP GO:0051336 regulation of hydrolase activity ## Genes ## 1 DLC1, NRP2, NRP1, EDN1, PDLIM3, GJA1, TTN, GJA5, ZIC3, TGFB2, CERKL, GATA6, COL4A3BP, GAB1, SEMA3C, MKL2, SLC22A5, MB, PTPRJ, RXRA, VANGL2, MYH6, TNNT2, HHEX, MURC, MIB1, FOXC2, FOXC1, ADAM19, MYL2, TCAP, EGLN1, SOX9, ITGB1, CHD7, HEXIM1, PKD2, NFATC4, PCSK5, ACTC1, TGFBR2, NF1, HSPG2, SMAD3, TBX1, TNNI3, CSRP3, FOXP1, KCNJ8, PLN, TSC2, ATP6V0A1, TGFBR3, HDAC9 ## 2 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, EFNB2, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 3 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 4 DLC1, ENAH, NRP1, PGF, ZIC2, TGFB2, CD44, ILK, SEMA3C, RET, AR, RXRA, VANGL2, LEF1, TNNT2, HHEX, MIB1, NCOA3, FOXC2, FOXC1, TGFB1I1, WNT5A, COBL, BBS4, FGFR3, TNC, BMPR2, CTNND1, EGLN1, NR3C1, SOX9, TCF7L1, IGF1R, FOXQ1, MACF1, HOXA5, BCL2, PLXND1, CAR2, ACTC1, TBX4, SMAD3, FZD3, SHANK3, FZD6, HOXB4, FREM2, TSC2, ZIC5, TGFBR3, APAF1 ## 5 GNA13, CAV1, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, CDH2, MEIS1, WT1, TGFB2, WARS, PTK2, CERKL, APOE, CXCR4, ANG, SEMA3C, PLCD1, NOS2, MKL2, PLXND1, FIGF, FGF2, PTPRJ, TGFBR2, TBX4, NF1, TBX1, TNNI3, PNPLA6, VASH1, THY1, NUS1, MEOX2, ECSCR, AMOT, HBEGF, FOXC2, FOXC1, HDAC7 ## 6 CAV1, XIAP, AGFG1, ADORA2A, TNNC1, TBC1D9, LEPR, ABHD5, EDN1, ASAP2, ASAP3, SMAP1, TBC1D12, ANG, TBC1D14, MTCH1, TBC1D13, TBC1D4, TBC1D30, DHCR24, HIP1, VAV3, NOS1, NF1, MYH6, RICTOR, TBC1D22A, THY1, PLCE1, RNF7, NDEL1, CHML, IFT57, ACAP2, TSC2, ERN1, APAF1, ARAP3, ARAP2, ARAP1, HTR2A, F2R ## adj_pval ## 1 0.000002170 ## 2 0.000010400 ## 3 0.000007620 ## 4 0.000119000 ## 5 0.000720000 ## 6 0.001171166#查看基因的數據格式 head(EC$genelist)## ID logFC AveExpr t P.Value adj.P.Val B ## 1 Slco1a4 6.645388 1.2168670 88.65515 1.32e-18 2.73e-14 29.02715 ## 2 Slc19a3 6.281525 1.1600468 69.95094 2.41e-17 2.49e-13 27.62917 ## 3 Ddc 4.483338 0.8365231 65.57836 5.31e-17 3.65e-13 27.18476 ## 4 Slco1c1 6.469384 1.3558865 59.87613 1.62e-16 8.34e-13 26.51242 ## 5 Sema3c 5.515630 2.3252117 58.53141 2.14e-16 8.81e-13 26.33626 ## 6 Slc38a3 4.761755 0.9218670 54.11559 5.58e-16 1.76e-12 25.70308

了解了兩個輸入數據格式后,就可以用cirlce_dat函數來生成畫圖數據了。

# 生成畫圖所需的數據格式 circ <- circle_dat(EC$david, EC$genelist)head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966

circ對象有八列數據,分別是

  • category:BP(生物過程),CC(細胞組分)或 MF(分子功能)

  • ID: GO id(可選列, 想使用不基于GO id的功能分析工具,可以不選ID列;這里的ID也可以是KEGG ID)

  • term:GO通路

  • count:每個通路的基因個數

  • gene:基因名 - logFC:每個基因的logFC值

  • adj_pval:adjusted p值,adj_pval<0.05的通路被認為是顯著富集的

  • zscore:zscore不是指統計學的標準化方式,而是一個很容易計算的值,來估計生物過程(/分子功能/細胞成分)更可能降低(負值)或增加(正值)。計算方法就是上調基因的數量減去下調基因的數量再除以每個通路基因數目的平方根

畫圖

GOBar–條形圖

最開始查看數據時,我們希望能從圖中展示盡可能多的通路,并且也希望能找到有價值的通路,因此需要一些參數來評估重要性。條形圖經常用于描述樣本數據,故而我們可以用GOBar函數能快速創建一個好看的的條形圖。

首先直接生成一個簡單的條形圖,橫軸是GO Terms,根據它們的zscore對條進行排序;縱軸是 -log(adj p-value);顏色表示的是zscore,藍色表示z-score是負值,在對應通路基因表達更可能下降,紅色表示z-score是正值,在對應通路基因表達更可能升高。如果需要,可以通過將參數order.by.zscore設置為FALSE來更改順序,在這種情況下條形圖基于它們的顯著性進行排序。

# 生成簡單的條形圖 GOBar(subset(circ, category == 'BP'))

#GOBar(subset(circ, category == 'BP',order.by.zscore=FALSE))

另外,通過更改display參數來根據通路的類別來繪制條形圖。

#根據通路的類別來繪制條形圖 GOBar(circ, display = 'multiple')

添加標題,并使用參數zsc.col更改zscore的顏色。

# Facet the barplot, add a title and change the colour scale for the z-score GOBar(circ, display = 'multiple', title = 'Z-score coloured barplot', zsc.col = c('yellow', 'black', 'cyan'))

條形圖是很常見的,也很容易理解,但我們可以使用氣泡圖來顯示數據更多信息。

GOBubble–泡泡圖

橫軸是zscore;縱軸是-log(adj p-value),類似于條形圖,越高表示富集越顯著;圓的面積與對應通路的的基因數(circ$count)成正比;顏色對應于該通路所對應的類別,綠色生物過程,紅色是細胞組分,藍色是分子功能。可通過輸入?GOBubble查看GOBubble函數的幫助頁面來更改圖片的所有參數。在默認情況下,每個圓標有對應的GO ID,右側也會隨之顯示GO ID和GO term對應關系的表。可通過設置參數table.legend為FALSE來隱藏它。如果要顯示通路描述,請設置參數ID為FALSE。不過由于空間有限和圓重疊,并非所有圓都被標記,只顯示了-log(adj p-value) > 3(默認是5)的通路。

# 生成泡泡圖,并展示-log(adj p-value) > 3 的通路的 GO IDGOBubble(circ, labels = 3)

若給泡泡圖要添加標題,或指定圓圈的顏色并單獨展示各類別的通路并更改展示的GO ID閾值,可添加以下參數:

GOBubble(circ, title = 'Bubble plot', colour = c('orange', 'darkred', 'gold'), display = 'multiple', labels = 3)

通過將參數bg.col設置為TRUE,為通路的類別的背景著色。

GOBubble(circ, title = 'Bubble plot with background colour', display = 'multiple', bg.col = T, labels = 3)

新版本的包中包含一個新函數reduce_overlap,該函數可以減少冗余項的數量,即能刪除基因重疊大于或等于設定閾值的所有通路,只將每組的一個通路作為代表保留,而不考慮GO所有通路的展示。通過減少冗余項的數量,圖的可讀性(如氣泡圖)顯著改善。

# reduce_overlap,參數設置為0.75 reduced_circ <- reduce_overlap(circ, overlap = 0.75) GOBubble(reduced_circ, labels = 2.8)

GOCircle–圈圖展示基因功能富集分析結果

雖然展示所有信息的圖有助于我們發現哪些通路最有意義,不過實際情況還是取決于你想要用數據確認的假設和想法,最重要的通路也不一定是你感興趣的。因此,在手動選擇一組有價值的通路(EC$process)后,我們需要一張圖為我們展示此組特定通路的更詳細的信息。不過通過呈現這些圖能得出一個問題:有時很難解釋zscore提供的信息。畢竟這個計算方法并不通用,如上所示,它僅僅是上調基因的數量減去下調基因的數量除以每個通路基因數目的平方根,用GOCircle得出的圖也強調了這一事實。

圈圖外圈的圓用散點展示了每個通路的基因的logFC值。紅色圓圈表示上調和藍色表示下調。可以使用參數lfc.col更改顏色。這也解釋了為什么在某些情況下,非常重要的通路具有接近零的zscore。zscore為零并不意味著該通路不重要。它只是表明zscore是粗略的衡量標準,因為顯然zscore也沒有考慮生物過程中單個基因的功能水平和激活依賴性。

GOCircle(circ)

nsub參數可是設置數字或字符向量。如果它是字符向量,則它包含要顯示的GO ID或通路;

# 生成特定通路的圈圖 IDs <- c('GO:0007507', 'GO:0001568', 'GO:0001944', 'GO:0048729', 'GO:0048514', 'GO:0005886', 'GO:0008092', 'GO:0008047') GOCircle(circ, nsub = IDs)

如果nsub是數字向量,則該數字定義顯示的個數。它從輸入數據幀的第一行開始。這種可視化僅適用于較小的數據。最大通路數默認為12。雖然通路數量減少,但顯示的信息量會增加。

# 圈圖展示數據前十個通路 GOCircle(circ, nsub = 10)

GOChord–圈圖展示基因和通路之間的關系

GOChord能展示了所選基因和通路之間的關系和基因的logFC。首先需要輸入一個矩陣,可以自己構建0-1矩陣,也可以使用函數chord_dat構建。該函數有三個參數:data,genes和process,其中最后兩個參數至少要有一個參數。然后函數circle_dat將表達數據與功能分析的結果相結合。

條形圖和氣泡圖可以讓您對數據有第一印象,現在,可以選擇了一些我們認為有價值的基因和通路,盡管GOCircle添加了一個層來顯示基因在通路的表達值,但它缺乏單個基因和多個通路之間關系的信息。要弄清楚某些基因是否與多個過程相關聯并不容易。GOChord就彌補了GOCircle的缺陷。生成的數據行是基因,列是通路,“0”表示該基因未被分配到該通路,“1”正相反。

# 找到感興趣的的基因,這里我們以EC$genes為例 head(EC$genes)## ID logFC ## 1 PTK2 -0.6527904 ## 2 GNA13 0.3711599 ## 3 LEPR 2.6539788 ## 4 APOE 0.8698346 ## 5 CXCR4 -2.5647537 ## 6 RECK 3.6926860# 獲得感興趣基因的通路 EC$process## [1] "heart development" "phosphorylation" ## [3] "vasculature development" "blood vessel development" ## [5] "tissue morphogenesis" "cell adhesion" ## [7] "plasma membrane"# 使用chord_dat構建矩陣 chord <- chord_dat(circ, EC$genes, EC$process) head(chord)## heart development phosphorylation vasculature development ## PTK2 0 1 1 ## GNA13 0 0 1 ## LEPR 0 0 1 ## APOE 0 0 1 ## CXCR4 0 0 1 ## RECK 0 0 1 ## blood vessel development tissue morphogenesis cell adhesion ## PTK2 1 0 0 ## GNA13 1 0 0 ## LEPR 1 0 0 ## APOE 1 0 0 ## CXCR4 1 0 0 ## RECK 1 0 0 ## plasma membrane logFC ## PTK2 1 -0.6527904 ## GNA13 1 0.3711599 ## LEPR 1 2.6539788 ## APOE 1 0.8698346 ## CXCR4 1 -2.5647537 ## RECK 1 3.6926860

示例中我們傳遞了兩個參數,若只指定genes參數,則結果是所選基因列表和具有至少一個指定基因的所有過程構建0-1矩陣;若只指定了process參數,則結果是所有基因生成0-1矩陣,這些基因分配給列表中的至少一個過程。要注意只指定genes和process參數可能會導致0-1矩陣很大,從而導致可視化結果混亂。

head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966# Generate the matrix with a list of selected genes chord_genes <- chord_dat(data = circ, genes = EC$genes) head(chord_genes)## heart development vasculature development blood vessel development ## PTK2 0 1 1 ## GNA13 0 1 1 ## LEPR 0 1 1 ## APOE 0 1 1 ## CXCR4 0 1 1

該圖表是為了展示較小的高維數據的子集。主要可以調整兩個參數:gene.order和nlfc。genes參數可指定為’logFC’,‘alphabetical’,‘none’。實際上,我們一般指定genes參數為logFC;nlfc參數是這個函數最重要的參數之一,因為它能處理每個基因有0個或多個logFC值怎么在矩陣呈現。故而我們應該指定參數來避免錯誤。

例如,如果有一個沒logFC值的矩陣,則必須設置nlfc=0;或者在多個條件或批次對基因進行差異表達分析,這時每個基因包含多個logFC值,需要設置nlfc=logFC列數。默認值為“1”,因為認為大多數時候每個基因只有一個logFC值。用space參數定義表示logFC的彩色矩形之間的空間。gene.size參數規定基因名字字體大小,gene.space規定基因名字間的空間大小。

chord <- chord_dat(data = circ, genes = EC$genes, process = EC$process) GOChord(chord, space = 0.02, gene.order = 'logFC', gene.space = 0.25, gene.size = 5)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

可根據logFC值設定gene.order=‘logFC’,對基因按照logFC值進行排序。有時圖片會變得有點擁擠,可以通過使用limit參數自動執行減少顯示的基因或通路的數量。Limit是具有兩個截止值的向量(默認值是c(0,0))。第一個值規定了基因必須分配的最少通路個數。第二個值確定分配給通路的基因個數。

# 僅顯示分配給至少三個通路的基因 GOChord(chord, limit = c(3, 0), gene.order = 'logFC')## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOHeat–熱圖展示基因和通路

GOHeat函數能用熱圖展示基因和通路之間的關系,類似于GOChord。橫向展示生物過程,縱向展示基因。每列被分成小的矩形,顏色一般取決于logFC值。另外具有富集到相似功能通路的基因被聚類。熱圖顏色選擇有兩種模式,具體取決于nlfc參數。如果nlfc = 0,則顏色為每個基因所富集到的通路個數。詳見例子:

# First, we use the chord object without logFC column to create the heatmap GOHeat(chord[,-8], nlfc = 0)

GOHeat(chord[,-8])

在nlfc = 1的情況下,顏色對應于基因的logFC

GOHeat(chord, nlfc = 1, fill.col = c('red', 'yellow', 'green'))

GOCluster–Golden eye

GOCluster功能背后的想法是盡可能多地顯示信息。這是一個例子:

GOCluster(circ, EC$process, clust.by = 'logFC', term.width = 2)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

層級聚類是一種流行的基因表達無監督聚類分析方法,可確保無偏差的將基因按表達模式組合在一起,因此聚在一起的類可能包含多組共調節或功能相關的基因。GOCluster使用核心R中的hclust方法執行基因表達譜的層級聚類。如果要更改距離度量或聚類算法,請分別使用參數metric和clust,得到的樹形圖可在ggdendro的幫助下進行轉換,并能用ggplot2進行可視化。選擇圓形布局,因為它不僅有效而且視覺上吸引人。樹形圖旁邊的第一個圓環代表基因的logFC,它實際上是聚類樹的葉子。如果您對多個對比感興趣,可以修改nlfc參數,默認情況下,它設置為“1”,因此只繪制一個環。logFC值使用用戶可定義的色標(lfc.col)進行顏色編碼;下一個圓環表示分配給基因的通路。為了好看,對通路數目進行了削減,通路的顏色可以使用參數term.col來。依然可以使用?GOCluster來查看如何更改參數。這個函數最重要的參數是clust.by,可以指定它用基因表達模式(‘logFC’,如上圖)或功能類別(‘terms’)進行聚類。

GOCluster(circ, EC$process, clust.by = 'term', lfc.col = c('darkgoldenrod1', 'black', 'cyan1'))## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOVenn–維恩圖

維恩圖可用于檢測各種差異表達基因列表之間的關系,或探索功能分析中多個通路基因的交集。維恩圖不僅顯示重疊基因的數量,還顯示有關基因表達模式的信息(通常是上調,通常是下調或反調節)。目前,最多三個數據集作為輸入。輸入數據至少包含兩列:一列用于基因名稱,一列用于logFC值。

l1 <- subset(circ, term == 'heart development', c(genes,logFC)) l2 <- subset(circ, term == 'plasma membrane', c(genes,logFC)) l3 <- subset(circ, term == 'tissue morphogenesis', c(genes,logFC)) GOVenn(l1,l2,l3, label = c('heart development', 'plasma membrane', 'tissue morphogenesis'))

例如,心臟發育和組織形態發生有22個基因,12個是上調的,10個是下調的。需要注意的重要一點是,餅圖不顯示冗余信息。因此,如果比較三個數據集,則所有數據集共有的基因(中間的餅圖)不包含在其他餅圖中。可使用此工具的shinyapp https://wwalter.shinyapps.io/Venn/, Web工具更具交互性,圓與數據集的基因數量成面積比例,并且可以使用滑塊移動小餅圖,并且具有GOVenn功能的所有選項來改變圖的布局,也可以下載圖片和基因列表。

軟件主頁:https://wencke.github.io/

GOplot包介紹

GOplot包用于生物數據的可視化。更確切地說,該包將表達數據與功能分析的結果整合并進行可視化。但是要注意該包不能用于執行這些分析,只能把分析結果進行可視化。在所有科學領域,由于空間限制和結果所需的簡潔性,切實地去描述事物很難,所以需要將信息進行可視化,使用圖片來傳達信息。精心設計的圖形能在更小的空間提供更多的信息。該包的設想就是能讓用戶快速檢查大量數據,揭示數據的趨勢和找出數據中的模式和相關性。

  • 論文圖表基本規范

  • 學術圖表的基本配色方法

  • 數據可視化基本套路總結

數據可視化可以幫助我們去尋找生物問題的答案,也可以對某一假設進行判斷,甚至可能發現不同的角度來調查不同的問題。并且該包的畫圖函數是以數據的層次結構為基礎進行開發的,從整體數據開始,以所選基因和對應通路的子集結束。

讓我們用例子來具體解釋。

舉例說明

我們調用GOplot自帶的數據,該數據來自于GEO的GSE47067,包含來自兩個組織(腦和心臟)的內皮細胞的轉錄組信息,更多信息詳見Nolan等人的論文https://www.ncbi.nlm.nih.gov/pubmed/23871589,然后將數據進行標準化處理并尋找差異表達的基因,再使用DAVID功能注釋工具(DAVID注釋數據更新比較慢,現在已經不太推薦,建議用去東方,最好用的在線GO富集分析工具和這個只需一步就可做富集分析的網站還未發表就被CNS等引用超過350次進行富集分析,?一文掌握GSEA,超詳細教程)對差異表達基因進行基因注釋(adjusted p-value < 0.05)和功能富集分析。該數據集包含以下五類數據:

名稱描述數據集大小
EC$eset進行標準化后的腦和心臟內皮細胞(3次重復)基因表達量20644 x 7
EC$genelist差異表達基因(adjusted p-value < 0.05)2039 x 7
EC$david用DAVID對差異基因進行功能富集分析的結果174 x 5
EC$gene基因和logFC37 x 2
EC$process選擇的富集生物過程的特征向量7

了解數據格式

我們希望查看差異表達基因的GO富集通路,但在我們開始畫圖之前我們需要提供符合格式需求的數據。通常來說,畫圖所需的數據是自己提供,但該包內有一個函數circle_dat可以幫我們處理數據格式。circle_dat能合并所選擇的基因的功能富集分析結果及其logFC值,主要是用于差異表達基因。circle_dat的使用很簡單,只要讀入兩個數據即可。第一個數據包含功能富集分析結果,至少有四列(功能富集分析類別、通路、基因、adjusted p-value)。第二個數據是所選基因的及其logFC,該數據可以是來源limma統計分析的結果 (生信寶典注:一定注意兩個文件基因的命名方式要一致,比如都是Gene symbol)。我們用實例來看以上提到的數據格式。

#安裝已發布的穩定版本 #install.packages('GOplot') #安裝github上的開發版本 #install_github('wencke/wencke.github.io') #載入包 library(GOplot) #讀入包內自帶的數據 data(EC) #查看功能富集分析結果的數據格式 head(EC$david)## Category ID Term ## 1 BP GO:0007507 heart development ## 2 BP GO:0001944 vasculature development ## 3 BP GO:0001568 blood vessel development ## 4 BP GO:0048729 tissue morphogenesis ## 5 BP GO:0048514 blood vessel morphogenesis ## 6 BP GO:0051336 regulation of hydrolase activity ## Genes ## 1 DLC1, NRP2, NRP1, EDN1, PDLIM3, GJA1, TTN, GJA5, ZIC3, TGFB2, CERKL, GATA6, COL4A3BP, GAB1, SEMA3C, MKL2, SLC22A5, MB, PTPRJ, RXRA, VANGL2, MYH6, TNNT2, HHEX, MURC, MIB1, FOXC2, FOXC1, ADAM19, MYL2, TCAP, EGLN1, SOX9, ITGB1, CHD7, HEXIM1, PKD2, NFATC4, PCSK5, ACTC1, TGFBR2, NF1, HSPG2, SMAD3, TBX1, TNNI3, CSRP3, FOXP1, KCNJ8, PLN, TSC2, ATP6V0A1, TGFBR3, HDAC9 ## 2 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, EFNB2, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 3 GNA13, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, FOXO1, GJA5, TGFB2, WARS, CERKL, APOE, CXCR4, ANG, SEMA3C, NOS2, MKL2, FGF2, RAPGEF1, PTPRJ, RECK, VASH1, PNPLA6, THY1, MIB1, NUS1, FOXC2, FOXC1, CAV1, CDH2, MEIS1, WT1, CDH5, PTK2, FBXW8, CHD7, PLCD1, PLXND1, FIGF, PPAP2B, MAP2K1, TBX4, TGFBR2, NF1, TBX1, TNNI3, LAMA4, MEOX2, ECSCR, HBEGF, AMOT, TGFBR3, HDAC7 ## 4 DLC1, ENAH, NRP1, PGF, ZIC2, TGFB2, CD44, ILK, SEMA3C, RET, AR, RXRA, VANGL2, LEF1, TNNT2, HHEX, MIB1, NCOA3, FOXC2, FOXC1, TGFB1I1, WNT5A, COBL, BBS4, FGFR3, TNC, BMPR2, CTNND1, EGLN1, NR3C1, SOX9, TCF7L1, IGF1R, FOXQ1, MACF1, HOXA5, BCL2, PLXND1, CAR2, ACTC1, TBX4, SMAD3, FZD3, SHANK3, FZD6, HOXB4, FREM2, TSC2, ZIC5, TGFBR3, APAF1 ## 5 GNA13, CAV1, ACVRL1, NRP1, PGF, IL18, LEPR, EDN1, GJA1, CDH2, MEIS1, WT1, TGFB2, WARS, PTK2, CERKL, APOE, CXCR4, ANG, SEMA3C, PLCD1, NOS2, MKL2, PLXND1, FIGF, FGF2, PTPRJ, TGFBR2, TBX4, NF1, TBX1, TNNI3, PNPLA6, VASH1, THY1, NUS1, MEOX2, ECSCR, AMOT, HBEGF, FOXC2, FOXC1, HDAC7 ## 6 CAV1, XIAP, AGFG1, ADORA2A, TNNC1, TBC1D9, LEPR, ABHD5, EDN1, ASAP2, ASAP3, SMAP1, TBC1D12, ANG, TBC1D14, MTCH1, TBC1D13, TBC1D4, TBC1D30, DHCR24, HIP1, VAV3, NOS1, NF1, MYH6, RICTOR, TBC1D22A, THY1, PLCE1, RNF7, NDEL1, CHML, IFT57, ACAP2, TSC2, ERN1, APAF1, ARAP3, ARAP2, ARAP1, HTR2A, F2R ## adj_pval ## 1 0.000002170 ## 2 0.000010400 ## 3 0.000007620 ## 4 0.000119000 ## 5 0.000720000 ## 6 0.001171166#查看基因的數據格式 head(EC$genelist)## ID logFC AveExpr t P.Value adj.P.Val B ## 1 Slco1a4 6.645388 1.2168670 88.65515 1.32e-18 2.73e-14 29.02715 ## 2 Slc19a3 6.281525 1.1600468 69.95094 2.41e-17 2.49e-13 27.62917 ## 3 Ddc 4.483338 0.8365231 65.57836 5.31e-17 3.65e-13 27.18476 ## 4 Slco1c1 6.469384 1.3558865 59.87613 1.62e-16 8.34e-13 26.51242 ## 5 Sema3c 5.515630 2.3252117 58.53141 2.14e-16 8.81e-13 26.33626 ## 6 Slc38a3 4.761755 0.9218670 54.11559 5.58e-16 1.76e-12 25.70308

了解了兩個輸入數據格式后,就可以用cirlce_dat函數來生成畫圖數據了。

# 生成畫圖所需的數據格式 circ <- circle_dat(EC$david, EC$genelist)head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966

circ對象有八列數據,分別是

  • category:BP(生物過程),CC(細胞組分)或 MF(分子功能)

  • ID: GO id(可選列, 想使用不基于GO id的功能分析工具,可以不選ID列;這里的ID也可以是KEGG ID)

  • term:GO通路

  • count:每個通路的基因個數

  • gene:基因名 - logFC:每個基因的logFC值

  • adj_pval:adjusted p值,adj_pval<0.05的通路被認為是顯著富集的

  • zscore:zscore不是指統計學的標準化方式,而是一個很容易計算的值,來估計生物過程(/分子功能/細胞成分)更可能降低(負值)或增加(正值)。計算方法就是上調基因的數量減去下調基因的數量再除以每個通路基因數目的平方根

畫圖

GOBar–條形圖

最開始查看數據時,我們希望能從圖中展示盡可能多的通路,并且也希望能找到有價值的通路,因此需要一些參數來評估重要性。條形圖經常用于描述樣本數據,故而我們可以用GOBar函數能快速創建一個好看的的條形圖。

首先直接生成一個簡單的條形圖,橫軸是GO Terms,根據它們的zscore對條進行排序;縱軸是?-log(adj p-value);顏色表示的是zscore,藍色表示z-score是負值,在對應通路基因表達更可能下降,紅色表示z-score是正值,在對應通路基因表達更可能升高。如果需要,可以通過將參數order.by.zscore設置為FALSE來更改順序,在這種情況下條形圖基于它們的顯著性進行排序。

# 生成簡單的條形圖 GOBar(subset(circ, category == 'BP'))

#GOBar(subset(circ, category == 'BP',order.by.zscore=FALSE))

另外,通過更改display參數來根據通路的類別來繪制條形圖。

#根據通路的類別來繪制條形圖 GOBar(circ, display = 'multiple')

添加標題,并使用參數zsc.col更改zscore的顏色。

# Facet the barplot, add a title and change the colour scale for the z-score GOBar(circ, display = 'multiple', title = 'Z-score coloured barplot', zsc.col = c('yellow', 'black', 'cyan'))

條形圖是很常見的,也很容易理解,但我們可以使用氣泡圖來顯示數據更多信息。

GOBubble–泡泡圖

橫軸是zscore;縱軸是-log(adj p-value),類似于條形圖,越高表示富集越顯著;圓的面積與對應通路的的基因數(circ$count)成正比;顏色對應于該通路所對應的類別,綠色生物過程,紅色是細胞組分,藍色是分子功能。可通過輸入?GOBubble查看GOBubble函數的幫助頁面來更改圖片的所有參數。在默認情況下,每個圓標有對應的GO ID,右側也會隨之顯示GO ID和GO term對應關系的表。可通過設置參數table.legend為FALSE來隱藏它。如果要顯示通路描述,請設置參數ID為FALSE。不過由于空間有限和圓重疊,并非所有圓都被標記,只顯示了-log(adj p-value) > 3(默認是5)的通路。

# 生成泡泡圖,并展示-log(adj p-value) > 3 的通路的 GO IDGOBubble(circ, labels = 3)

若給泡泡圖要添加標題,或指定圓圈的顏色并單獨展示各類別的通路并更改展示的GO ID閾值,可添加以下參數:

GOBubble(circ, title = 'Bubble plot', colour = c('orange', 'darkred', 'gold'), display = 'multiple', labels = 3)

通過將參數bg.col設置為TRUE,為通路的類別的背景著色。

GOBubble(circ, title = 'Bubble plot with background colour', display = 'multiple', bg.col = T, labels = 3)

新版本的包中包含一個新函數reduce_overlap,該函數可以減少冗余項的數量,即能刪除基因重疊大于或等于設定閾值的所有通路,只將每組的一個通路作為代表保留,而不考慮GO所有通路的展示。通過減少冗余項的數量,圖的可讀性(如氣泡圖)顯著改善。

# reduce_overlap,參數設置為0.75 reduced_circ <- reduce_overlap(circ, overlap = 0.75) GOBubble(reduced_circ, labels = 2.8)

GOCircle–圈圖展示基因功能富集分析結果

雖然展示所有信息的圖有助于我們發現哪些通路最有意義,不過實際情況還是取決于你想要用數據確認的假設和想法,最重要的通路也不一定是你感興趣的。因此,在手動選擇一組有價值的通路(EC$process)后,我們需要一張圖為我們展示此組特定通路的更詳細的信息。不過通過呈現這些圖能得出一個問題:有時很難解釋zscore提供的信息。畢竟這個計算方法并不通用,如上所示,它僅僅是上調基因的數量減去下調基因的數量除以每個通路基因數目的平方根,用GOCircle得出的圖也強調了這一事實。

圈圖外圈的圓用散點展示了每個通路的基因的logFC值。紅色圓圈表示上調和藍色表示下調。可以使用參數lfc.col更改顏色。這也解釋了為什么在某些情況下,非常重要的通路具有接近零的zscore。zscore為零并不意味著該通路不重要。它只是表明zscore是粗略的衡量標準,因為顯然zscore也沒有考慮生物過程中單個基因的功能水平和激活依賴性。

GOCircle(circ)

nsub參數可是設置數字或字符向量。如果它是字符向量,則它包含要顯示的GO ID或通路;

# 生成特定通路的圈圖 IDs <- c('GO:0007507', 'GO:0001568', 'GO:0001944', 'GO:0048729', 'GO:0048514', 'GO:0005886', 'GO:0008092', 'GO:0008047') GOCircle(circ, nsub = IDs)

如果nsub是數字向量,則該數字定義顯示的個數。它從輸入數據幀的第一行開始。這種可視化僅適用于較小的數據。最大通路數默認為12。雖然通路數量減少,但顯示的信息量會增加。

# 圈圖展示數據前十個通路 GOCircle(circ, nsub = 10)

GOChord–圈圖展示基因和通路之間的關系

GOChord能展示了所選基因和通路之間的關系和基因的logFC。首先需要輸入一個矩陣,可以自己構建0-1矩陣,也可以使用函數chord_dat構建。該函數有三個參數:data,genes和process,其中最后兩個參數至少要有一個參數。然后函數circle_dat將表達數據與功能分析的結果相結合。

條形圖和氣泡圖可以讓您對數據有第一印象,現在,可以選擇了一些我們認為有價值的基因和通路,盡管GOCircle添加了一個層來顯示基因在通路的表達值,但它缺乏單個基因和多個通路之間關系的信息。要弄清楚某些基因是否與多個過程相關聯并不容易。GOChord就彌補了GOCircle的缺陷。生成的數據行是基因,列是通路,“0”表示該基因未被分配到該通路,“1”正相反。

# 找到感興趣的的基因,這里我們以EC$genes為例 head(EC$genes)## ID logFC ## 1 PTK2 -0.6527904 ## 2 GNA13 0.3711599 ## 3 LEPR 2.6539788 ## 4 APOE 0.8698346 ## 5 CXCR4 -2.5647537 ## 6 RECK 3.6926860# 獲得感興趣基因的通路 EC$process## [1] "heart development" "phosphorylation" ## [3] "vasculature development" "blood vessel development" ## [5] "tissue morphogenesis" "cell adhesion" ## [7] "plasma membrane"# 使用chord_dat構建矩陣 chord <- chord_dat(circ, EC$genes, EC$process) head(chord)## heart development phosphorylation vasculature development ## PTK2 0 1 1 ## GNA13 0 0 1 ## LEPR 0 0 1 ## APOE 0 0 1 ## CXCR4 0 0 1 ## RECK 0 0 1 ## blood vessel development tissue morphogenesis cell adhesion ## PTK2 1 0 0 ## GNA13 1 0 0 ## LEPR 1 0 0 ## APOE 1 0 0 ## CXCR4 1 0 0 ## RECK 1 0 0 ## plasma membrane logFC ## PTK2 1 -0.6527904 ## GNA13 1 0.3711599 ## LEPR 1 2.6539788 ## APOE 1 0.8698346 ## CXCR4 1 -2.5647537 ## RECK 1 3.6926860

示例中我們傳遞了兩個參數,若只指定genes參數,則結果是所選基因列表和具有至少一個指定基因的所有過程構建0-1矩陣;若只指定了process參數,則結果是所有基因生成0-1矩陣,這些基因分配給列表中的至少一個過程。要注意只指定genes和process參數可能會導致0-1矩陣很大,從而導致可視化結果混亂。

head(circ)## category ID term count genes logFC adj_pval ## 1 BP GO:0007507 heart development 54 DLC1 -0.9707875 2.17e-06 ## 2 BP GO:0007507 heart development 54 NRP2 -1.5153173 2.17e-06 ## 3 BP GO:0007507 heart development 54 NRP1 -1.1412315 2.17e-06 ## 4 BP GO:0007507 heart development 54 EDN1 1.3813006 2.17e-06 ## 5 BP GO:0007507 heart development 54 PDLIM3 -0.8876939 2.17e-06 ## 6 BP GO:0007507 heart development 54 GJA1 -0.8179480 2.17e-06 ## zscore ## 1 -0.8164966 ## 2 -0.8164966 ## 3 -0.8164966 ## 4 -0.8164966 ## 5 -0.8164966 ## 6 -0.8164966# Generate the matrix with a list of selected genes chord_genes <- chord_dat(data = circ, genes = EC$genes) head(chord_genes)## heart development vasculature development blood vessel development ## PTK2 0 1 1 ## GNA13 0 1 1 ## LEPR 0 1 1 ## APOE 0 1 1 ## CXCR4 0 1 1

該圖表是為了展示較小的高維數據的子集。主要可以調整兩個參數:gene.order和nlfc。genes參數可指定為’logFC’,‘alphabetical’,‘none’。實際上,我們一般指定genes參數為logFC;nlfc參數是這個函數最重要的參數之一,因為它能處理每個基因有0個或多個logFC值怎么在矩陣呈現。故而我們應該指定參數來避免錯誤。

例如,如果有一個沒logFC值的矩陣,則必須設置nlfc=0;或者在多個條件或批次對基因進行差異表達分析,這時每個基因包含多個logFC值,需要設置nlfc=logFC列數。默認值為“1”,因為認為大多數時候每個基因只有一個logFC值。用space參數定義表示logFC的彩色矩形之間的空間。gene.size參數規定基因名字字體大小,gene.space規定基因名字間的空間大小。

chord <- chord_dat(data = circ, genes = EC$genes, process = EC$process) GOChord(chord, space = 0.02, gene.order = 'logFC', gene.space = 0.25, gene.size = 5)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

可根據logFC值設定gene.order=‘logFC’,對基因按照logFC值進行排序。有時圖片會變得有點擁擠,可以通過使用limit參數自動執行減少顯示的基因或通路的數量。Limit是具有兩個截止值的向量(默認值是c(0,0))。第一個值規定了基因必須分配的最少通路個數。第二個值確定分配給通路的基因個數。

# 僅顯示分配給至少三個通路的基因 GOChord(chord, limit = c(3, 0), gene.order = 'logFC')## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOHeat–熱圖展示基因和通路

GOHeat函數能用熱圖展示基因和通路之間的關系,類似于GOChord。橫向展示生物過程,縱向展示基因。每列被分成小的矩形,顏色一般取決于logFC值。另外具有富集到相似功能通路的基因被聚類。熱圖顏色選擇有兩種模式,具體取決于nlfc參數。如果nlfc = 0,則顏色為每個基因所富集到的通路個數。詳見例子:

# First, we use the chord object without logFC column to create the heatmap GOHeat(chord[,-8], nlfc = 0)

GOHeat(chord[,-8])

在nlfc = 1的情況下,顏色對應于基因的logFC

GOHeat(chord, nlfc = 1, fill.col = c('red', 'yellow', 'green'))

GOCluster–Golden eye

GOCluster功能背后的想法是盡可能多地顯示信息。這是一個例子:

GOCluster(circ, EC$process, clust.by = 'logFC', term.width = 2)## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

層級聚類是一種流行的基因表達無監督聚類分析方法,可確保無偏差的將基因按表達模式組合在一起,因此聚在一起的類可能包含多組共調節或功能相關的基因。GOCluster使用核心R中的hclust方法執行基因表達譜的層級聚類。如果要更改距離度量或聚類算法,請分別使用參數metric和clust,得到的樹形圖可在ggdendro的幫助下進行轉換,并能用ggplot2進行可視化。選擇圓形布局,因為它不僅有效而且視覺上吸引人。樹形圖旁邊的第一個圓環代表基因的logFC,它實際上是聚類樹的葉子。如果您對多個對比感興趣,可以修改nlfc參數,默認情況下,它設置為“1”,因此只繪制一個環。logFC值使用用戶可定義的色標(lfc.col)進行顏色編碼;下一個圓環表示分配給基因的通路。為了好看,對通路數目進行了削減,通路的顏色可以使用參數term.col來。依然可以使用?GOCluster來查看如何更改參數。這個函數最重要的參數是clust.by,可以指定它用基因表達模式(‘logFC’,如上圖)或功能類別(‘terms’)進行聚類。

GOCluster(circ, EC$process, clust.by = 'term', lfc.col = c('darkgoldenrod1', 'black', 'cyan1'))## Warning: Using size for a discrete variable is not advised.## Warning: Removed 7 rows containing missing values (geom_point).

GOVenn–維恩圖

維恩圖可用于檢測各種差異表達基因列表之間的關系,或探索功能分析中多個通路基因的交集。維恩圖不僅顯示重疊基因的數量,還顯示有關基因表達模式的信息(通常是上調,通常是下調或反調節)。目前,最多三個數據集作為輸入。輸入數據至少包含兩列:一列用于基因名稱,一列用于logFC值。

l1 <- subset(circ, term == 'heart development', c(genes,logFC)) l2 <- subset(circ, term == 'plasma membrane', c(genes,logFC)) l3 <- subset(circ, term == 'tissue morphogenesis', c(genes,logFC)) GOVenn(l1,l2,l3, label = c('heart development', 'plasma membrane', 'tissue morphogenesis'))

例如,心臟發育和組織形態發生有22個基因,12個是上調的,10個是下調的。需要注意的重要一點是,餅圖不顯示冗余信息。因此,如果比較三個數據集,則所有數據集共有的基因(中間的餅圖)不包含在其他餅圖中。可使用此工具的shinyapp https://wwalter.shinyapps.io/Venn/, Web工具更具交互性,圓與數據集的基因數量成面積比例,并且可以使用滑塊移動小餅圖,并且具有GOVenn功能的所有選項來改變圖的布局,也可以下載圖片和基因列表。

軟件主頁:https://wencke.github.io/

總結

以上是生活随笔為你收集整理的赠你一只金色的眼 - 富集分析和表达数据可视化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩视频免费观看高清 | 欧美一级黄色片 | 99精品视频在线 | 在线观看亚洲电影 | 成人黄色电影在线播放 | 蜜臀久久99精品久久久久久网站 | 91精品国产99久久久久久久 | 国产一级高清视频 | 亚洲黄色三级 | 国产精品xxxx18a99 | 天天草天天干天天 | 欧美综合久久久 | 成人免费视频视频在线观看 免费 | 天堂av免费在线 | 久久精品黄| 粉嫩av一区二区三区四区在线观看 | 99精品国产在热久久 | www.国产在线观看 | www免费在线观看 | 人人玩人人弄 | 亚洲综合视频在线 | www国产亚洲 | 久久人网| 国产麻豆精品免费视频 | 久久成人18免费网站 | 久久国色夜色精品国产 | 天天色天天搞 | 日韩午夜电影网 | 日韩va在线观看 | 日韩大片在线看 | 中文在线免费视频 | wwwwwww黄 | 久久综合狠狠综合 | 欧美日韩一区二区视频在线观看 | 天天射天天爱天天干 | 欧美日韩国产二区 | 又黄又爽又色无遮挡免费 | 中文字幕 国产视频 | 亚洲精品国精品久久99热一 | 亚洲影视九九影院在线观看 | 黄色在线免费观看网站 | 国产午夜精品在线 | 日韩中文在线视频 | 在线播放精品一区二区三区 | 91精品国产入口 | 亚洲资源在线网 | 青草视频在线免费 | 免费在线观看黄色网 | 国内精品小视频 | 日日摸日日 | 国产在线无 | 人人揉人人揉人人揉人人揉97 | 高清一区二区三区 | 嫩嫩影院理论片 | 在线观看视频h | 丁香网婷婷| 国产一区在线看 | 日韩在线色视频 | 久久精品国产免费看久久精品 | а天堂中文最新一区二区三区 | 久久久久久久久久久成人 | 国产手机视频在线 | 天堂av在线7 | 天天爽网站 | 亚洲播放一区 | 国产精品黄色 | 国产福利网站 | 五月婷婷视频 | 欧美激情精品久久久久久变态 | 粉嫩av一区二区三区入口 | 韩国av一区二区三区在线观看 | 黄色av电影网 | 操操日| 亚洲成成品网站 | 操一草| 欧美日韩18 | 久草香蕉在线 | 91人人爽久久涩噜噜噜 | 久久色视频 | 大胆欧美gogo免费视频一二区 | 十八岁免进欧美 | 一区二区三区四区在线 | 成人小视频在线观看免费 | 91 在线视频| 又黄又爽又无遮挡免费的网站 | 国产麻豆果冻传媒在线观看 | 99视频在线免费看 | 欧美精品乱码久久久久久按摩 | 久久精品欧美一区 | 欧美专区亚洲专区 | 亚av在线| 色综合网在线 | 天天超碰 | 国产色拍拍拍拍在线精品 | 五月网婷婷 | 中文字幕无吗 | 日韩欧美在线视频一区二区三区 | 国产96在线观看 | 国产v在线播放 | 国产精品系列在线 | 国产网红在线 | 亚洲涩涩涩涩涩涩 | 国内外成人在线视频 | 青青河边草观看完整版高清 | 国产高清中文字幕 | 欧美成人日韩 | 久久视频中文字幕 | 国产精品av免费 | 欧美日韩三级在线观看 | 日韩在线三区 | 欧美一级在线 | 国产专区欧美专区 | 91欧美视频网站 | 日韩欧美综合视频 | 欧美精品一区二区蜜臀亚洲 | 欧美日本啪啪无遮挡网站 | 欧美日韩免费在线观看视频 | 国产色视频网站2 | 久久久久电影 | 91探花国产综合在线精品 | 久久免费视频网 | 国产精品第2页 | 中文字幕第一页av | 美女视频黄是免费的 | 日本久久久久久久久 | 一本一道波多野毛片中文在线 | 97在线资源 | 久久久久免费视频 | 尤物九九久久国产精品的分类 | 欧美精品一区在线 | 麻豆极品 | 中文字幕国产视频 | 久久99国产精品二区护士 | 亚洲免费专区 | 在线观看久久 | 综合久久五月天 | 免费高清无人区完整版 | 国产三级视频 | 美女免费视频网站 | av大片免费| 9999在线| 日韩一区二区免费视频 | 国产福利一区二区三区视频 | 亚洲91网站 | 日韩午夜电影 | 在线观看第一页 | 91av在线视频免费观看 | 久久电影网站中文字幕 | 久久久2o19精品 | 97碰碰视频 | 91精品在线播放 | 天堂av高清 | 欧美一级艳片视频免费观看 | 在线观看黄色小视频 | 国产精品日韩久久久久 | 黄色视屏在线免费观看 | 久久久香蕉视频 | 成人h在线 | 色婷婷www| 国产这里只有精品 | 精品 一区 在线 | 三级av在线免费观看 | 国产日韩欧美在线一区 | 黄污视频网站 | 久久久久影视 | 在线观看久 | 免费黄在线观看 | 国产激情久久久 | 成人免费在线观看入口 | 久草色在线观看 | 超碰97在线资源 | 精品视频久久 | 在线视频福利 | 国产视频精品久久 | 国产99在线免费 | 久久99九九99精品 | 九九热只有这里有精品 | 国产在线小视频 | 午夜精品久久久久久久久久久久久久 | 国产一级一片免费播放放 | 婷婷综合在线 | 18性欧美xxxⅹ性满足 | 在线国产片 | 国产91精品在线播放 | 中文一区二区三区在线观看 | 播五月综合 | www.777奇米| 国产在线专区 | www.久热| 日韩视频免费在线 | av手机版 | 国产韩国精品一区二区三区 | 国产精品久久久久久久久岛 | 毛片888| 久久久久久久久久久网站 | 婷婷五月情 | 久久99国产综合精品免费 | 97热在线观看 | 色综合久| 欧美亚洲成人免费 | 欧美激情在线看 | 亚洲国产中文字幕 | 精品久久91| 久久99精品波多结衣一区 | 午夜精品视频在线 | 亚洲一区天堂 | 亚洲精品456在线播放 | 免费男女羞羞的视频网站中文字幕 | 国产在线一区二区 | 国产免费人成xvideos视频 | 欧美另类激情 | 亚洲一级性 | 四虎www| 日韩精品综合在线 | 五月激情在线 | 在线色亚洲 | 久久久久免费网 | 九九热精品在线 | 久久免费精品国产 | 欧美日韩一区二区在线观看 | 91传媒91久久久| 少妇高潮冒白浆 | 国产成人精品亚洲精品 | 人人爽人人做 | 中文字幕av有码 | 国产999在线| 九九亚洲精品 | 亚洲成人家庭影院 | 一区二区在线不卡 | 亚洲最新av在线 | 国产精品123 | 欧美男男激情videos | 亚洲成av人片在线观看www | 亚洲一区二区三区在线看 | 欧美大荫蒂xxx | 九九九国产 | 色片网站在线观看 | 久久99精品国产麻豆婷婷 | 成人羞羞免费 | av在线影片 | 欧美精品久久久久久久久老牛影院 | 久久在线一区 | 欧美日韩亚洲国产一区 | 日韩av资源在线观看 | 亚洲人在线 | 久久久国产成人 | 中文字幕第 | 狠狠狠狠狠干 | 久久av中文字幕片 | 不卡在线一区 | 久久久久久久久久久影视 | 亚洲日本在线视频观看 | 人人干人人搞 | 人人狠狠 | 日韩av一区二区三区四区 | 中文字幕成人 | 天堂网在线视频 | 91久久电影 | 国产精品99久久久久久久久久久久 | 97在线看片| 久久精品99国产精品亚洲最刺激 | 在线免费黄色av | 国产亚洲免费观看 | 久久高清av | japanesexxxhd奶水 91在线精品一区二区 | 久久精品中文字幕 | 国产麻豆视频在线观看 | 亚洲美女视频网 | 婷婷爱五月天 | 天天操 夜夜操 | 91视频电影 | 精品一区二区6 | 久久99网 | 99在线观看视频 | 激情视频免费在线观看 | 成人三级黄色 | 人人爽人人爽人人爽人人爽 | 精品久久福利 | 亚洲精品综合在线 | 日韩在线观看一区二区三区 | 五月婷婷综合网 | 久久成人18免费网站 | 综合国产在线 | 91在线观看视频 | 99se视频在线观看 | 久久视讯 | 久久精品成人欧美大片古装 | 成人黄视频| 91精品在线免费视频 | 超碰九九| 国产aa免费视频 | 日韩亚洲国产精品 | 色中色资源站 | 日日爱视频 | 日韩av电影中文字幕 | 国内久久久久久 | 欧美日韩国产一区二区三区 | 国产资源在线观看 | 亚洲天天摸日日摸天天欢 | 亚洲精品无 | 国产精品永久免费在线 | 久久综合影视 | 国产精品九九九九九 | 99精品视频在线播放观看 | 免费观看的黄色 | 天天操天天艹 | 国产精品美女视频 | 色干综合| 日韩二区三区在线观看 | 一区二区日韩av | 日本高清中文字幕有码在线 | 亚洲资源视频 | 久久国色夜色精品国产 | 国产精品美女久久久久久久网站 | av黄色在线 | 国产综合婷婷 | 成人免费 在线播放 | av电影不卡 | av女优中文字幕在线观看 | 国产 一区二区三区 在线 | 依人成人综合网 | 精品主播网红福利资源观看 | 久久综合婷婷综合 | 在线中文字幕av观看 | 国产剧情在线一区 | 精品亚洲欧美一区 | 久久久人人人 | 欧美日韩国产精品一区二区亚洲 | 99精品国产兔费观看久久99 | 免费av福利 | 日韩高清在线看 | 国产精品v欧美精品 | 激情综合站| 久99久视频 | 91亚洲狠狠婷婷综合久久久 | 日本动漫做毛片一区二区 | 日韩高清不卡一区二区三区 | 五月激情五月激情 | av在线播放观看 | 色偷偷88888欧美精品久久久 | 99精品区 | 中文字幕国产 | 久久超碰在线 | 五月婷亚洲 | 亚洲精品国产第一综合99久久 | 亚洲专区免费观看 | 精品在线观看视频 | 国产第页 | 涩涩资源网 | 国产一区自拍视频 | 激情视频二区 | 日韩在线免费播放 | 97色综合| 天天综合在线观看 | 色婷婷免费 | 免费看片成年人 | 91成人精品一区在线播放69 | 天天操天天添 | 久精品在线 | 在线观看你懂的网址 | 黄色片视频免费 | 亚洲精品一区二区精华 | 一区二区视频电影在线观看 | 91av影视 | 超碰人人草人人 | 天天操夜| 亚洲一区精品二人人爽久久 | 日本中文字幕网址 | 久久精品国产精品亚洲 | 亚洲高清视频在线 | 四虎影视成人永久免费观看视频 | 精品96久久久久久中文字幕无 | 在线观看国产高清视频 | 97超碰人人 | 国产精品久久久久亚洲影视 | 性色av免费在线观看 | 草久久久久久久 | 国产精品一区二区三区免费视频 | av丝袜在线 | 99久久99久久精品国产片果冰 | 黄色免费av | 99久久99久久精品国产片 | 精品国产片 | 国产一区在线观看视频 | 国产精品密入口果冻 | 天天天插| 久久精品永久免费 | 国内精品美女在线观看 | 国产高清在线免费观看 | 成人在线视频你懂的 | 色亚洲网 | 亚洲黄在线观看 | 国产精品久久久久久久妇 | 久久精品综合 | 五月婷婷六月丁香 | 日韩av一区二区在线 | 黄色视屏免费在线观看 | 园产精品久久久久久久7电影 | 播五月婷婷 | 久久男人影院 | 日韩在线无 | 国产明星视频三级a三级点| 黄色亚洲精品 | 亚洲国产综合在线 | 久久国产女人 | 亚洲国产精品va在线 | 九九九热精品 | 少妇bbb好爽 | 99人久久精品视频最新地址 | 亚洲精品午夜久久久久久久 | 中文字幕在线影院 | 国产成人精品久久亚洲高清不卡 | 狠狠色丁香婷婷综合 | 手机看国产毛片 | 91黄色在线视频 | 国产美女精彩久久 | 91天天操 | 日日爽天天 | 国产视频欧美视频 | 狠狠干天天 | 亚洲色综合 | 中文字幕视频播放 | 精品一区二区三区在线播放 | 美女视频黄免费网站 | 五月天激情在线 | 亚洲精品电影在线 | 欧美日韩国产亚洲乱码字幕 | 天天综合狠狠精品 | 女人久久久久 | 91视频大全| 欧美另类交人妖 | 在线观看免费版高清版 | 日韩av不卡播放 | 在线免费观看成人 | 成人久久综合 | 狠狠色丁香婷婷综合久小说久 | 少妇精品久久久一区二区免费 | 激情婷婷av| 午夜精品影院 | 天堂v中文| 福利视频网站 | 激情婷婷综合 | 日韩午夜视频在线观看 | 日本字幕网 | 九九久久影院 | 久久不见久久见免费影院 | 日本精a在线观看 | 黄污污网站 | 超碰在线99 | 日日躁夜夜躁aaaaxxxx | 国产原厂视频在线观看 | 国产精品久久99综合免费观看尤物 | 亚洲激情五月 | www.com.黄 | 国产精品视频线看 | 国产特级毛片aaaaaa | 午夜精品久久久久久久久久久久 | 黄色91免费观看 | 91九色国产 | 91麻豆操 | 欧美黄网站| 亚洲一区欧美精品 | 成人欧美日韩国产 | 久久伊人操 | 久久综合色婷婷 | 国产流白浆高潮在线观看 | 毛片网站在线观看 | 国产香蕉视频在线播放 | 精品综合久久久 | 在线观看av网 | 久久久久亚洲天堂 | 成人中文字幕在线观看 | 色综合综合 | 激情黄色一级片 | 久久国产精品一国产精品 | 青青草久草在线 | 国产小视频免费在线网址 | 国产色a在线观看 | 激情五月开心 | 亚洲精品国产精品国自产观看浪潮 | 超碰国产在线播放 | 亚洲国产欧洲综合997久久, | 久久精品欧美一 | 免费看av在线 | 日日夜夜干 | 在线观看av麻豆 | 91视频午夜 | 黄色一区二区在线观看 | 国产精品男女视频 | 久久久久亚洲精品男人的天堂 | 日韩欧美亚州 | 色婷婷av国产精品 | 一区二区在线影院 | 综合网在线视频 | 国产青春久久久国产毛片 | 91色在线观看视频 | 天天在线视频色 | 91av小视频 | 久久国产精品视频免费看 | 网址你懂的在线观看 | 国产精品中文久久久久久久 | 日韩丝袜在线观看 | 久久99热精品这里久久精品 | 国产在线97 | 欧美福利视频 | 色黄久久久久久 | 久久影院午夜论 | 色婷婷视频网 | 青青河边草免费观看完整版高清 | 天天操天天曰 | 色无五月 | 久久久久久久18 | www.色com | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 在线看一区| 日韩欧美在线不卡 | 国产精品中文字幕在线 | 日韩激情一二三区 | 精品久久久久久电影 | 91黄视频在线观看 | 国产精品国产三级国产aⅴ入口 | 久久视频免费在线 | 九九99靖品| 日韩欧美亚州 | 91在线精品一区二区 | 五月婷婷在线视频观看 | 久久国产精品免费观看 | 天天操天天摸天天射 | 国产精品一区二区久久 | 在线观看中文字幕2021 | 中文字幕乱视频 | 网站在线观看你们懂的 | 日日草视频 | 久久久99精品免费观看app | 丰满少妇在线观看 | 香蕉视频亚洲 | 久久99精品国产99久久6尤 | 91色偷偷 | 97精品视频在线播放 | 国产区在线| 国产精品高清一区二区三区 | 97福利在线 | 美女网站视频免费都是黄 | 亚洲成人精品 | 中文字幕观看视频 | 在线播放日韩 | 2000xxx影视 | 久久xx视频 | 天天操天天干天天操天天干 | 亚洲天堂免费视频 | 中文字幕在线播放第一页 | 夜夜骑日日操 | 激情av网| 日韩免费专区 | 欧美做受高潮电影o | 亚洲一级片在线观看 | 97精品国产97久久久久久粉红 | 欧产日产国产69 | 草久在线播放 | 国产不卡在线 | 四虎影视av| 亚洲成人资源在线观看 | 91精品在线视频观看 | 色综合久久88 | 97视频入口免费观看 | 欧美日韩精品在线免费观看 | 中文字幕亚洲高清 | 天天综合人人 | 五月天婷亚洲天综合网鲁鲁鲁 | 免费观看完整版无人区 | 亚洲jizzjizz日本少妇 | 国产又粗又长的视频 | 亚洲理论影院 | 女人18精品一区二区三区 | 久久国产高清视频 | 肉色欧美久久久久久久免费看 | 免费在线观看成人 | 99久久影院| 中文字幕在线观看完整版 | 伊人www22综合色 | 国产一线二线三线在线观看 | 国产成人三级在线观看 | 视频在线亚洲 | 91视频高清完整版 | 国产麻豆精品传媒av国产下载 | 国产色a在线观看 | 亚洲综合精品视频 | 亚洲精品网站在线 | 人人射 | 波多野结衣视频一区 | 99精品在线视频播放 | 亚洲精品视频网 | 国产精品一区二区久久 | 国产一级免费播放 | 国产精品美女久久久久久久 | 久久久久久久久久久电影 | 日本99热 | 国产伦理久久 | 久久精品电影网 | 天天艹天天干天天 | 国色天香永久免费 | 亚洲韩国一区二区三区 | 久久亚洲婷婷 | 精品免费久久 | 国产中出在线观看 | www99精品| 亚洲视频在线观看免费 | 丁香高清视频在线看看 | 综合久久久久 | 国产丝袜高跟 | 国产精品成人久久久久 | 三级av中文字幕 | 91视频久久久久 | 久久久久久久久久久久久久免费看 | 欧美一区日韩一区 | 美女视频黄是免费的 | 国产精品久久久久久久久久新婚 | 国产麻豆精品免费视频 | av黄色av | 久久久久国产a免费观看rela | 日韩激情小视频 | 国内成人精品2018免费看 | 超碰免费97 | 国产精品久久久久久a | 亚洲91在线 | 久久免费电影 | 在线精品播放 | 久久精品视频在线观看免费 | 成年人免费看片 | 日韩久久精品一区二区三区下载 | 国产色视频一区二区三区qq号 | 国产98色在线 | 日韩 | 午夜精品一区二区三区免费视频 | 91成人午夜 | 婷婷视频导航 | 五月天中文字幕 | 欧美一区二区在线刺激视频 | 九色91在线| 国产伦精品一区二区三区照片91 | 精品一区二区免费视频 | 亚洲精品乱码 | 日本精品视频在线观看 | 最近中文国产在线视频 | 在线观看免费av网站 | 中文字幕字幕中文 | 在线影视 一区 二区 三区 | 97视频网址 | 精品日韩中文字幕 | 激情欧美丁香 | 久草视频在线看 | 日韩高清精品免费观看 | 日本少妇高清做爰视频 | 日韩精品一区二区免费视频 | 成年人国产在线观看 | 在线小视频 | 欧美成人黄色片 | 福利二区视频 | 久操97| 手机在线看永久av片免费 | 国产免费午夜 | 天堂av网址 | 日韩a级黄色片 | 久久激情视频网 | 欧美日韩在线视频一区二区 | 高清有码中文字幕 | 不卡视频一区二区三区 | 久久国产精品免费看 | 久久99精品热在线观看 | 亚洲人毛片| 国产在线视频资源 | 亚洲国产欧洲综合997久久, | 久久美女精品 | 亚洲另类视频在线观看 | 国产资源| 一区二区三区不卡在线 | 91视频在线观看大全 | 亚洲涩涩一区 | 日韩午夜在线观看 | 不卡的av片 | 久久精品国产v日韩v亚洲 | 婷婷视频在线播放 | 日韩免费一级电影 | 天天透天天插 | 69av久久 | 亚洲精品在线免费 | 国产欧美日韩精品一区二区免费 | 99久久精品免费看 | 欧美成人黄| 国产精品久久久久久av | 91成人短视频在线观看 | 九七视频在线 | 国产在线观看你懂得 | 三级毛片视频 | 91精品国产91热久久久做人人 | 91av视屏 | av福利在线播放 | 亚洲精品一区二区三区高潮 | 欧美日韩一区二区三区在线观看视频 | 亚洲国产中文字幕在线 | 国产精品mm | 人人澡人人爽 | 激情视频国产 | 爱射综合 | 国产麻豆成人传媒免费观看 | 人人添人人澡 | 在线视频你懂得 | 99九九热只有国产精品 | 日韩一区二区三区免费电影 | 草免费视频| 午夜视频在线观看一区二区 | 手机在线黄色网址 | 亚洲狠狠婷婷综合久久久 | 一级片免费观看视频 | 911精品视频 | 麻豆传媒视频在线 | 免费成人在线观看 | 成人亚洲免费 | 国产综合福利在线 | 日韩一区二区三区免费视频 | 在线电影av| 美女一区网站 | 亚洲国产精品人久久电影 | 亚洲国产视频直播 | 国产亚洲精品av | 999久久久久久久久 69av视频在线观看 | 国产精品免费观看网站 | 国产一区二区精品久久91 | 九草在线视频 | 五月天中文字幕mv在线 | 国产一级在线视频 | 99国产精品视频免费观看一公开 | 超碰在线免费福利 | 国产视频一区在线播放 | 波多野结衣日韩 | 深夜免费网站 | 成人影片在线免费观看 | 99精品国产aⅴ | 亚洲精品h | 久久99电影| 四虎在线免费观看视频 | 免费网站v| 日韩在线视频一区二区三区 | japanesexxxxfreehd乱熟 | 偷拍精品一区二区三区 | 日韩a级黄色 | 超碰在线94| 视频一区在线免费观看 | 久久精品国产一区二区电影 | 日韩综合色 | 国产日韩在线一区 | 日韩精品一卡 | 婷婷色站| 日韩视频一区二区 | 五月婷综合 | 极品久久久 | 成人小电影在线看 | 天天干天天搞天天射 | 日韩电影在线一区 | 欧美午夜精品久久久久 | 欧美激情综合五月色丁香 | 亚洲国产精品传媒在线观看 | 久久黄页 | 7777精品伊人久久久大香线蕉 | 国产精品永久久久久久久久久 | 日日综合网 | 久艹在线免费观看 | 国产精品一区二区三区四区在线观看 | 四虎影视www| 偷拍区另类综合在线 | 免费一级片在线 | 亚洲首页| 91在线麻豆 | 天天干天天操天天搞 | 日韩女同一区二区三区在线观看 | 免费成人黄色av | 4hu视频 | 欧美伦理一区二区 | 亚洲欧美国产精品久久久久 | 久久免费在线观看视频 | 久久理论视频 | 97视频在线免费播放 | 久久黄色片 | 久草在线高清视频 | 91亚色免费视频 | 黄色片软件网站 | 久久久精品视频网站 | 成人97视频一区二区 | 日韩中文在线字幕 | 狠狠色丁香久久综合网 | 狠狠干干 | 高清免费av在线 | 国产小视频在线 | 中文综合在线 | 综合网五月天 | 伊人婷婷网 | 日韩高清一 | 精品欧美日韩 | 久久久久久久久久久高潮一区二区 | 免费av小说 | 国产高清成人在线 | 日韩av进入 | 欧洲一区二区三区精品 | 久久香蕉国产 | 又黄又爽又湿又无遮挡的在线视频 | 国产精品刺激对白麻豆99 | 免费日韩三级 | 国产精品一区在线观看 | 高清精品在线 | 丁香五月亚洲综合在线 | 久久国产三级 | 日韩.com| 中文在线8资源库 | 日本三级久久 | 久久精品理论 | 最新av在线网址 | 国产色区| 欧美一区二区精品在线 | 美女网站久久 | 国产麻豆精品传媒av国产下载 | 欧美日韩精品久久久 | 手机成人av在线 | 国产中年夫妇高潮精品视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 黄色在线观看免费 | 天天射天天干 | 夜夜夜夜操 | 国产伦理一区 | 99久久久国产精品免费99 | 国产中文字幕第一页 | 日本高清xxxx| 91在线资源 | 日韩性xxxx| 免费av影视 | 精品九九九九 | 久久视频二区 | 精品毛片一区二区免费看 | 中文字幕国内精品 | 天天曰夜夜操 | 在线只有精品 | 免费黄在线观看 | 九热精品 | 亚洲国产日韩精品 | 一区二区三区播放 | 精品在线观看一区二区 | 一区二区精品在线观看 | 国产一级免费观看 | 99视频国产精品免费观看 | 欧美一区二区视频97 | 亚洲va欧美va人人爽春色影视 | 亚洲免费在线视频 | av高清影院 | 国产精品久久久久久久久久妇女 | 国产中文字幕三区 | 国产色婷婷 | 国产成人av免费在线观看 | 91免费视频黄 | 在线观看亚洲免费视频 | 亚洲 精品在线视频 | 麻豆一二三精选视频 | 激情网五月婷婷 | 99在线观看免费视频精品观看 | 狠狠干免费 | 人人草在线视频 | www视频在线免费观看 | 成人禁用看黄a在线 | 伊人资源视频在线 | 国产精品免费麻豆入口 | 日韩精品一区在线播放 | 亚洲国产精品第一区二区 | 99精品色 | 日韩大片在线免费观看 | 六月丁香在线观看 | 精品久久久久一区二区国产 | 国产精品久久久久久久久久久久冷 | 国产盗摄精品一区二区 | 久久69精品久久久久久久电影好 | 韩国一区二区三区视频 | 日韩欧美在线一区 | 国产夫妻自拍av | 日韩电影中文字幕在线 | 天天干.com| wwwwww色| 欧美精品在线一区二区 | 国产成人精品一区二区三区在线观看 | 五月天丁香 | 五月综合婷 | 国产成人一区二区三区久久精品 | 日本大尺码专区mv | 乱男乱女www7788| 国产永久网站 | 国产精品久久久免费 | 国产亚洲精品久久久久动 | 色婷丁香| 波多野结衣理论片 | 久久精品国产亚洲 | 久久久久观看 | 免费观看一级成人毛片 | 福利片免费看 | 日本性生活一级片 | 国内99视频| 日韩中文字幕在线 | 国产日韩欧美在线观看视频 | 国产成人a v电影 | 国产福利在线不卡 | 久草com | 夜夜夜| 日韩免费av在线 | 成人动态视频 | 国产精品毛片久久久久久久久久99999999 | 国产一级淫片在线观看 | 美女一级毛片视频 | av网站免费看 | 日韩精品影视 | 天天色天天操综合 | 国产高清在线观看 | 成人免费中文字幕 | 日韩精品一区二区三区免费观看视频 | 亚洲三级性片 | 国产一级片免费观看 | 精品国产区 | 国产亚洲精品久久久久久大师 | 最近字幕在线观看第一季 | 特级毛片网站 | 国产在线观看你懂得 | 伊人激情综合 | 91看片淫黄大片91 | 中文字幕激情 | 99av国产精品欲麻豆 | 色在线免费 | 91av在线免费观看 | 日韩精品在线视频免费观看 | 精品国产美女 | 9在线观看免费高清完整版 玖玖爱免费视频 | 99久久久国产精品免费观看 | 午夜123| 香蕉日日| 欧美日韩有码 | 久久久免费观看 | 欧美日韩视频在线 | 婷五月激情 | 久日精品 | 久久一线 | 人成免费网站 | 日韩大片在线观看 | 92中文资源在线 | 国产一区福利在线 | 国产精品福利视频 | 日韩精品在线看 | 成人久久久久 | 国产精品久久久久久久99 | 久久婷亚洲五月一区天天躁 | 免费看国产精品 | 久久电影中文字幕视频 | 欧美性爽爽 | 一本一本久久a久久精品牛牛影视 | 中文字幕亚洲在线观看 | 日韩久久久 | 久久一区二区三区日韩 | 国产视频精选在线 | 成人一级在线观看 | 日韩在线视频在线观看 | 狠狠色免费 | 日韩久久久久久久久久 | 三日本三级少妇三级99 | 天天干天天拍天天操天天拍 | 亚洲国内精品 | 免费在线观看一区 | 精品乱码一区二区三四区 | 96av麻豆蜜桃一区二区 | 国产69精品久久99的直播节目 | 99久久精品视频免费 | 看片网站黄色 | 美女视频a美女大全免费下载蜜臀 | 少妇性aaaaaaaaa视频 | 182午夜在线观看 | 亚洲激情五月 | 一级黄色片在线免费看 | 国产小视频在线观看 | 国产精品成久久久久三级 | 亚洲成人午夜在线 | 日韩精品视频免费看 | 五月婷婷综合在线观看 | 日本在线观看中文字幕无线观看 | 菠萝菠萝蜜在线播放 | 91av福利视频| 日韩在线二区 | 91禁看片| 在线观看中文字幕网站 | 天天操天天色天天 | 久草在线手机观看 | 国产女人免费看a级丨片 | 国产一区二区三区高清播放 | 成在人线av | 久久国产亚洲精品 | 国产精品国产三级国产aⅴ入口 | 在线观看视频国产 | 色综合色综合色综合 | 欧美激情精品久久久久久变态 |