<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          學(xué)習(xí)1010種熱圖繪制方法

          共 2204字,需瀏覽 5分鐘

           ·

          2020-09-19 01:34

          轉(zhuǎn)載自Epigenetics表觀遺傳學(xué),略有修改和補充。


          題目有感于德國天才數(shù)學(xué)家萊布尼茲對二進(jìn)制的闡述,和其傳教士好友布維對易經(jīng)等漢學(xué)的傳播。有興趣的可以閱讀萊布尼茲文章英文版:http://www.leibniz-translations.com/binary.htm (二進(jìn)制和伏羲八卦)


          In [3]: a = int('1010', 2)

          In [4]: a
          Out[4]: 10 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 想學(xué)Python的可以約起

          In [5]: bin(10)
          Out[5]: '0b1010'

          In [7]: bin (16)
          Out[7]: '0b10000'

          什么是 R 語言?R 語言,一種自由軟件編程語言與操作環(huán)境,主要用于統(tǒng)計分析、繪圖、數(shù)據(jù)挖掘。我之所以學(xué) R 語言,一方面是希望能夠利用 R 語言將原始數(shù)據(jù)轉(zhuǎn)化為可放入論文中的精美圖形,另一方面,大數(shù)據(jù)時代已經(jīng)到來,每個人都應(yīng)該懂一些大數(shù)據(jù)的處理手段,R 語言可以勝任。R 語言下載地址為:https://cran.r-project.org/,通常我們使用頁面更加優(yōu)雅的 RStudio,下載地址為:https://www.rstudio.com/。學(xué)習(xí)R可參考之前發(fā)布的帖子?R語言學(xué)習(xí) - 入門環(huán)境RstudioR語言學(xué)習(xí) - 基礎(chǔ)概念和矩陣操作在R中贊揚下努力工作的你,獎勵一份CheetShet。

          可以把 R 語言理解為一款性能強(qiáng)大的軟件,R 里面有很多可處理紛繁復(fù)雜任務(wù)的包(packages),包里面又有若干執(zhí)行具體功能的函數(shù)(functions),而每一個函數(shù)里面又有大量可調(diào)節(jié)的參數(shù)(parameters)。R 語言是開源的,世界各地的開發(fā)者們不斷地添磚加瓦,分享自己的智慧,截至到目前,R 里面可用的包達(dá)到 11987 個,這幾乎讓 R 語言強(qiáng)大到不可思議。值得注意的是,開發(fā)一個 R 包就可以發(fā)表一篇不錯的文章了。

          什么是熱圖?熱圖是矩陣中的數(shù)值以顏色來顯示的圖形化表示。熱圖因其豐富的色彩變化和生動飽滿的信息表達(dá)被廣泛應(yīng)用于各種大數(shù)據(jù)分析場景。之前生信寶典出過三篇文章介紹熱圖的繪制、美化、簡化R語言學(xué)習(xí) - 熱圖繪制 (heatmap),??R語言學(xué)習(xí) - 熱圖美化,? ?R語言學(xué)習(xí) - 熱圖簡化。另外還有在線繪制工具?最簡單漂亮的免費在線生信繪圖工具。

          R 語言里面可以用來繪制熱圖的主要包括:

          今天將按照這個順序依次為大家分享它們的繪圖方法。


          一、基礎(chǔ)安裝里的 heatmap 函數(shù)

          所謂基礎(chǔ)安裝,即下載安裝 R 語言后即可使用的包。

          heatmap 的使用格式如下:


          heatmap(x, Rowv = NULL, Colv = if(symm)"Rowv" else NULL,
          ? ? ? ?distfun = dist, hclustfun = hclust,
          ? ? ? ?reorderfun = function(d, w) reorder(d, w),
          ? ? ? ?add.expr, symm = FALSE, revC = identical(Colv, "Rowv"),
          ? ? ? ?scale = c("row", "column", "none"), na.rm = TRUE,
          ? ? ? ?margins = c(5, 5), ColSideColors, RowSideColors,
          ? ? ? ?cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 + 1/log10(nc),
          ? ? ? ?labRow = NULL, labCol = NULL, main = NULL,
          ? ? ? ?xlab = NULL, ylab = NULL,
          ? ? ? ?keep.dendro = FALSE, verbose = getOption("verbose"), ...)

          其中括號中的都是可調(diào)整的參數(shù),初步統(tǒng)計了一下,至少包含 23 項參數(shù),但是每一次繪制熱圖時,其實只需要部分參數(shù)即可完成繪圖。參數(shù)中比較重要的參數(shù)是:

          • x, 需要繪圖的矩陣

          • Rowv 決定“行層級聚類樹圖”是否以及如何被計算和重新排序,其默認(rèn)值為空;

          • Colv 決定“列層級聚類樹圖”是否或如何被從排序。如果x是一個對稱矩陣(行列數(shù)相同),那么?Colv=Rowv表示著列與行的處理方式相同。

          • scale = c("row", "column", "none"),按照行或列進(jìn)行歸一化

          • na.rm = TRUE,移除缺失值

          • 另外,以上沒有提到的參數(shù)是顏色,可用參數(shù) col=。


          以下我們通過一個簡單的案例來嘗試一下。
          Case: 將 50 名 NBA 球星的數(shù)據(jù)繪制成熱圖

          案例來源:http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/


          #首先要獲得數(shù)據(jù),直接用read.csv導(dǎo)入具有逗號分隔符的表格
          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          #R語言會保存一個nba的數(shù)據(jù)框,鍵入nba,可查看數(shù)據(jù)框的內(nèi)容
          nba
          #將nba這個數(shù)據(jù)框按照PTS(points, 分?jǐn)?shù))由低到高排序,注意nba$PTS后面的逗號是必須的,表示按行排序
          nba <- nba[order(nba$PTS),]
          #目前導(dǎo)入的數(shù)據(jù)框默認(rèn)以數(shù)值命名行,重新對行進(jìn)行命名
          row.names(nba) <- nba$Name
          #導(dǎo)入第2~20列的數(shù)據(jù),并將數(shù)據(jù)由數(shù)據(jù)框格式轉(zhuǎn)變?yōu)榫仃嚫袷?/span>
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          #利用heatmap繪圖,按列進(jìn)行標(biāo)準(zhǔn)化,顏色使用cm.colors函數(shù),使用100種顏色
          nba_heatmap <- heatmap(nba_matrix, col = cm.colors(100), scale="column")

          注意:(1)#后面一行的代碼都不被執(zhí)行,因此可以用來做標(biāo)注;(2)在數(shù)據(jù)整理過程中,如果你好奇數(shù)據(jù)整理后究竟發(fā)生了什么變化,只需要鍵入相應(yīng)的數(shù)據(jù)框或矩陣名,比如“nba”或“nba_matrix”,就可以查看變化;(3)熱圖繪制時一般輸入的是矩陣,而 R 默認(rèn)的輸入格式是數(shù)據(jù)框,因此需要轉(zhuǎn)化。矩陣和數(shù)據(jù)框的差異請參照R語言的相關(guān)教程。

          對于一個熱圖而言,有三個參數(shù)至關(guān)重要:1. 用來繪圖的矩陣是必須的;2. 熱圖最令人稱贊的就是它絢麗的顏色了,因此顏色參數(shù)不可或缺;3. 為了讓顏色的區(qū)分度更好,需要對數(shù)據(jù)按照一定的方式進(jìn)行歸一化 (選擇什么預(yù)處理方式需要慎重,具體看上面的熱圖美化)。小伙伴們可以自行嘗試不進(jìn)行歸一化的糟糕效果。


          圖 1. heatmap 繪制熱圖


          我們發(fā)現(xiàn),在繪圖的同時也繪制了層級聚類圖,對于 NBA 這一數(shù)據(jù),層級聚類圖是沒有太大意義的,而且顏色其實并不是我們平時所見的紅色和黃色。現(xiàn)在我們進(jìn)行調(diào)整


          nba_heatmap <- heatmap(nba_matrix, Rowv=NA, Colv=NA, 
          ? ? ? ? ? ? ? ? ? ? ? col = heat.colors(100), scale="column")

          我們進(jìn)行了三點調(diào)整:1. 將行層級聚類圖 Rowv 設(shè)置為 NA,即不顯示;2. 將列層級聚類圖設(shè)置為NA,即不顯示;3. cm.colors 修改為 heat.colors,即調(diào)整了顏色的模式。


          圖 2. 調(diào)整參數(shù)后用 heatmap 函數(shù)繪圖


          二、pheatmap 包里的 pheatmap 函數(shù)

          pheatmap 實際上是 Pretty Heatmaps 的縮寫,新的命名充滿了對原始 heatmap 的嫌棄。要使用非基礎(chǔ)安裝里面的包,就需要安裝并加載這個包,代碼如下:


          install.packages(“pheatmap”) ?#安裝pheatmap包
          library(pheatmap) ?#加載pheatmap包


          要查看一個包或者一個包里面函數(shù)的詳細(xì)介紹,代碼為:


          ?pheatmap ?#查看pheatmap包里面的詳細(xì)介紹
          ?pheatmap::pheatmap ?#查看pheatmap包里pheatmap函數(shù)的具體參數(shù)


          與 heatmap 類似的是,pheatmap 也可以同時繪制熱圖和系統(tǒng)樹圖,同樣需要矩陣格式的原始輸入,需要用 scale 進(jìn)行標(biāo)準(zhǔn)化,需要顏色;但不同的是,是否需要行或列的系統(tǒng)樹圖的表達(dá)方式不同,前者是Rowv=NULL?,而后者是cluster_rows = TRUE利用上面的 NBA 數(shù)據(jù),我們只是在繪制熱圖的那一步利用 pheatmap 函數(shù),輸入以下代碼:


          nba_heatmap <- pheatmap(nba_matrix,
          ? ? ? ? ? ? ? ? ? ? ? ?cluster_rows = TRUE, cluster_cols = TRUE,
          ? ? ? ? ? ? ? ? ? ? ? ?col = heat.colors(100), scale="column")


          圖 3. 用 pheatmap 繪制熱圖


          果然,pheatmap 一出手就不同凡響,信息要比 heatmap 更多。根據(jù)這幅圖,我們再倒退回去看 pheatmap 函數(shù)中的一些關(guān)鍵參數(shù)。


          • 熱圖中的色塊以小格子呈現(xiàn),與小格子相關(guān)的默認(rèn)參數(shù)有:border_color = "grey60", cellwidth = NA, cellheight = NA;如果我們不想讓每個格子都具有灰色的邊框,只需要設(shè)置 border_color = NA。

          • heatmap 函數(shù)做的熱圖非常大的問題在于我們雖然看到了顏色的差異,但是每一種顏色代表的具體數(shù)值又是多少呢?我們不得而知。但是 pheatmap 完美地解決了這一問題,看圖 3 的右上角,我們可以看到一個顏色和相對數(shù)值的對應(yīng)關(guān)系。與這一呈現(xiàn)相關(guān)的參數(shù)是:legend = TRUE, 默認(rèn)設(shè)置是保留 legend。

          • 如果想獲取pheatmap的結(jié)果,可以str(nba_heatmap),然后抽絲剝繭的取出每一部分內(nèi)容。


          三、heatmap.plus 包里面的 heatmap.plus 函數(shù)

          heatmap.plus 與 base 安裝里面的 heatmap 很像,只有兩個參數(shù) RowSideColors 和 ColSideColors 不一樣,在 heatmap 中 兩者的輸入格式是向量,而在 heatmap.plus 中輸入格式是矩陣。關(guān)于 R 語言中數(shù)據(jù)的格式請參照相關(guān)書籍。


          要理解 RowSideColors 和 ColSideColors 的含義,嘗試以下代碼:


          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          nba <- nba[order(nba$PTS),]
          row.names(nba) <- nba$Name
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          rc <- rainbow(nrow(nba_matrix), start = 0, end = .3)
          cc <- rainbow(ncol(nba_matrix), start = 0, end = .3)
          nba_heatmap <- heatmap(nba_matrix, Rowv=NA, Colv=NA,
          ? ? ? ? ? ? ? ? ? ? ? col = heat.colors(100),
          ? ? ? ? ? ? ? ? ? ? ? RowSideColors = rc,
          ? ? ? ? ? ? ? ? ? ? ? ColSideColors = cc,scale="column")



          圖5. 用 heatmap 繪制帶有測邊的熱圖


          這里 RowSideColors = rc,ColSideColors = cc,而 rc <- rainbow(nrow(nba_matrix),start = 0, end = .3),cc <- rainbow(ncol(nba_matrix), start = 0, end = .3)。


          側(cè)邊就是一個顏色梯度條,這里用到 rainbow 函數(shù),其使用格式是 rainbow(n, s = 1, v = 1, start = 0, end = max(1, n - 1)/n, alpha = 1),這里 n= nrow(nba_matrix), 而 s 和 v 分別代表飽和度(Saturation)和純度(Value),start 和 end 分別為色度(Hue)的起始點。


          但是這段代碼對 heatmap.plus 是不行的,首先需要將 rc 和 cc 轉(zhuǎn)變?yōu)榫仃?,試著運行下面這段代碼:


          rc <- rainbow(nrow(nba_matrix), start = 0, end = .3)
          cc <- rainbow(ncol(nba_matrix), start = 0, end = .3)
          rc <- matrix(as.character(rc),nrow = 50,ncol = 19)
          cc <- matrix(as.character(cc),nrow = 19,ncol = 50)
          nba_heatmap <- heatmap.plus(nba_matrix,Rowv=NA, Colv=NA,
          ? ? ? ? ? ? ? ? ? ? ? ? ? ?col = heat.colors(100),
          ? ? ? ? ? ? ? ? ? ? ? ? ? ?RowSideColors = rc, ColSideColors = cc,
          ? ? ? ? ? ? ? ? ? ? ? ? ? ?scale="column")


          圖 6. 用 heatmap.plus 繪制帶有測邊的熱圖


          pheatmap繪制帶有側(cè)邊的更合適,具體見?R語言學(xué)習(xí) - 熱圖簡化,?最簡單漂亮的免費在線生信繪圖工具。


          四、gplots 包里面的 heatmap.2 包

          按照慣例,我們還是試一試下面的代碼:


          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          nba <- nba[order(nba$PTS),]
          row.names(nba) <- nba$Name
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          heatmap.2(nba_matrix, Rowv=NA, Colv=NA, col = heat.colors(100), scale="column")


          得到如下圖:


          圖 7. 用 heatmap.2 繪制的熱圖


          我們發(fā)現(xiàn),圖中多了很多綠色的線,這是什么呢?查看說明才知道這是 "trace" line,與之相關(guān)的代碼為:trace=c("column","row","both","none"), tracecol="cyan",hline=median(breaks),vline=median(breaks),linecol=tracecol。hline 和 vline 分別表示水平和數(shù)值的虛線是否需要畫出,其默認(rèn)值均為中位數(shù)的轉(zhuǎn)折點。


          五、d3heatmap 包中的 d3heatmap 函數(shù)

          d3heatmap 里面一共包含三個函數(shù):d3heatmap、d3heatmapOutput、renderD3heatmap,后兩者是在 shiny 中使用的包裹函數(shù)。(shiny 是 RStudio 開發(fā)的一款用于構(gòu)建交互式網(wǎng)頁 app 的 R 包,shiny 的構(gòu)建有點復(fù)雜,這里暫且略過,因此只講解 d3heatmap)


          按照慣例,我們還是試一試下面的代碼:


          d3heatmap(nba_matrix, Rowv=NA, Colv=NA,
          ? ? ? ? ?col = heat.colors(100), scale="column")


          你會得到以下這幅圖,這幅圖看起來普普通通,但是神奇之處是當(dāng)你鼠標(biāo)落到任一色塊時,可以顯示當(dāng)前色塊的數(shù)值。


          圖 8. d3heatmap 繪制的交互式熱圖


          六、heatmaply 包里面的 heatmaply 函數(shù)

          heatmaply 也是交互式的。嘗試以下代碼:


          install.packages("heatmaply")
          library(heatmaply)
          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          nba <- nba[order(nba$PTS),]
          row.names(nba) <- nba$Name
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          heatmaply(nba_matrix, col = heat.colors(100),
          ? ? ? ? ?fontsize_row=7, fontsize_col=7, scale="column",
          ? ? ? ? ?margins = c(50,120,NA,0))


          圖 9. 用 heatmaply?繪制的熱圖


          這里新出現(xiàn)的 fontsize_row、fontsize_col 和 margins 參數(shù)分別表示行標(biāo)簽字體大小、列標(biāo)簽字體大小以及邊界(下、左、上、右)。


          七、iheatmapr 包里的?iheatmap 函數(shù)

          iheatmap 繪制的也是交互式的熱圖,這意味著你用鼠標(biāo)掠過熱圖上的色塊時,會顯示該點的數(shù)值。同時,在右上方可以看到一系列可以調(diào)整的小圖標(biāo),這些都是可以調(diào)節(jié)的參數(shù)。


          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          nba <- nba[order(nba$PTS),]
          row.names(nba) <- nba$Name
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          iheatmap(nba_matrix,colors = heat.colors(100), cluster_rows ="kmeans",
          ? ? ? ? cluster_cols ="hclust",row_k=10,scale="cols")


          注意這里的書寫方式,已經(jīng)改為 “colors=heat.colors(100)” 和 scale=”cols”

          圖 10. 用?iheatmap??繪制的熱圖 (一看就是plotly的效果,ggplot2的圖也可以直接plotly


          八、ComplexHeatmap 繪制熱圖

          首先需要特別強(qiáng)調(diào)的是,ComplexHeatmap 是 Bioconductor 里面的一個 R 包,安裝的方式與一般 CRAN 上的包的安裝方式不同,安裝和加載代碼如下:

          source("https://bioconductor.org/biocLite.R")
          biocLite("ComplexHeatmap")
          library(ComplexHeatmap)


          ComplexHeatmap 包里面用于繪圖的函數(shù)也叫做 Heatmap,注意這里的?H?是大寫。

          具體的參數(shù)可用 ?ComplexHeatmap::Heatmap 進(jìn)行查詢,試一下以下這段代碼:


          Heatmap(nba_matrix, cluster_rows = TRUE,
          ? ? ? ?cluster_columns = TRUE,
          ? ? ? ?col = heat.colors(100))


          圖 11. 用?Heatmap?繪制的熱圖


          這樣也是可以得到類似于基礎(chǔ)安裝里面的 heatmap 的。

          • 關(guān)于用 ComplexHeatmap 繪制熱圖,可以看這一個鏈接:

            http://bioconductor.org/packages/release/bioc/vignettes/ComplexHeatmap/inst/doc/s2.single_heatmap.html

          • 如果閱讀英文有困難,可以看這里:http://www.bioinfo-scrounger.com/archives/122


          另外,看到 Y 叔(生信領(lǐng)域有名的 Y 叔)關(guān)于熱圖的總結(jié),利用 Y 叔寫的?simplot?函數(shù),可用于可視化相似性矩陣。試著對 nba_matrix 做了一下相似性分析,由于數(shù)據(jù)有 50 行,因此只能把標(biāo)簽和字體尺寸調(diào)到非常小,才勉強(qiáng)可以看見。


          #安裝DOSE
          source("https://bioconductor.org/biocLite.R")
          biocLite("DOSE")
          library(DOSE)
          simplot(nba_matrix,labs.size = 1,font.size = 6)

          圖 12. 用?simplot??進(jìn)行相似性分析

          九、Lattice包里面的?levelplot?函數(shù)

          Lattice 包是基于 grid 創(chuàng)建的,有自己獨特的繪圖風(fēng)格。其中 lattice 包里面的 levelplot 函數(shù)可以用來繪制熱圖。


          library("lattice")
          library(latticeExtra)
          #準(zhǔn)備nba_matrix矩陣
          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
          nba <- nba[order(nba$PTS),]
          row.names(nba) <- nba$Name
          nba <- nba[,2:20]
          nba_matrix <- data.matrix(nba)
          #對參數(shù)進(jìn)行設(shè)置
          hc=hclust(dist(nba_matrix)) #按行聚類
          dd.row=as.dendrogram(hc) ? ? #保存行聚類樹形
          row.ord=order.dendrogram(dd.row) #保存行聚類順序
          hc=hclust(dist(t(nba_matrix))) #按列聚類
          dd.col=as.dendrogram(hc) #保存列聚類樹形
          col.rod=order.dendrogram(dd.col) #保存列聚類順序
          temp1=nba_matrix[row.ord,] #只對行聚類(是否對行、列聚類)
          levelplot(t(temp1),aspect="fill",
          ? ? ? ? ?colorkey=list(space="left",width=1.5),
          ? ? ? ? ?xlab="",ylab="",
          ? ? ? ? ?legend=list(right=list(fun=dendrogramGrob,
          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? args=list(x=dd.row,rod=row.ord,side='right',
          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? size=5)),
          ? ? ? ? ? ? ? ? ? ? ?scales=list(x=list(rot=90))))


          圖 13. 用 levelplot?繪制的熱圖


          十、ggplot2 包里面的 ggplot 函數(shù)繪制熱圖

          最后,不得不提到十分強(qiáng)大的 ggplot2。ggplot2 中,圖是采用串聯(lián)(+)號創(chuàng)建的,每個函數(shù)修改屬于自己的部分。下面參考 R-blogger 上的代碼,原網(wǎng)頁為:https://www.r-bloggers.com/ggplot2-quick-heatmap-plotting/


          嘗試以下代碼:


          library(ggplot2) ?
          library(plyr)
          require(reshape2)
          require(scales)
          nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv")
          nba$Name <- with(nba, reorder(Name, PTS))
          nba.m <- melt(nba) ?#對數(shù)據(jù)進(jìn)行融合
          nba.m <- ddply(nba.m, .(variable), transform, rescale = rescale(value))
          ggplot(nba.m, aes(variable, Name)) + geom_tile(aes(fill = rescale), colour = "white") + scale_fill_gradient(low = "white", high = "steelblue")


          圖 14. 用?ggplot?繪制的熱圖


          總結(jié):這篇文章帶領(lǐng)我們快速瀏覽了 R 語言里面的 10 種熱圖的繪制方式,并且提供了代碼。首先介紹了 4 種繪制非交互式熱圖的包,其次介紹了 4 種繪制交互式熱圖的包,最后介紹了 lattice 和 ggplot2 繪圖系統(tǒng)中繪制熱圖的方法。但由于筆者的水平十分有限,本次的講解比較淺顯,但顯而易見的是,每一種函數(shù)提供的熱圖的繪制參數(shù)很多,耐心鉆研,一定可以繪制出絢麗的熱圖。


          封面圖來源于Wikipedia:?https://en.wikipedia.org/wiki/Binary_number?

          如果看完代碼還不會的,可以參加我們的視頻課 http://bioinfo.ke.qq.com;或點擊原文使用線上版,各種繪圖。

          精品回顧

          畫圖三字經(jīng)?生信視頻?生信系列教程?心得體會?癌癥數(shù)據(jù)庫?

          高通量分析?Linux?Python?在線畫圖

          好多朋友還沒有養(yǎng)成看完轉(zhuǎn)發(fā)、點贊的習(xí)慣,應(yīng)該有的?。?/p>

          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产亚洲免费视频在线观看 | 2021国产免费自拍视频 | 91精品国产乱码久久久 | 亚洲成a人v欧美综合天堂 | 亚洲爆乳一区二区三区 |