久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

2017年最后10000天,學(xué)習(xí)1010個(gè)熱圖繪制方法

 yjt2004us 2017-12-15

 

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


In [3]: a = int('1010', 2)In [4]: aOut[4]: 10                                             想學(xué)Python的可以約起

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

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

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

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

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

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


一、基礎(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'), ...)

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

  • x, 需要繪圖的矩陣

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

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

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

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

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


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

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


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

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

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


圖 1. heatmap 繪制熱圖


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


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

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


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


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

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


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


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


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


與 heatmap 類似的是,,pheatmap 也可以同時(shí)繪制熱圖和系統(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ù)這幅圖,,我們?cè)俚雇嘶厝タ?pheatmap 函數(shù)中的一些關(guān)鍵參數(shù),。


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

  • heatmap 函數(shù)做的熱圖非常大的問題在于我們雖然看到了顏色的差異,但是每一種顏色代表的具體數(shù)值又是多少呢,?我們不得而知,。但是 pheatmap 完美地解決了這一問題,看圖 3 的右上角,,我們可以看到一個(gè)顏色和相對(duì)數(shù)值的對(duì)應(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 很像,,只有兩個(gè)參數(shù) RowSideColors 和 ColSideColors 不一樣,在 heatmap 中 兩者的輸入格式是向量,,而在 heatmap.plus 中輸入格式是矩陣,。關(guān)于 R 語言中數(shù)據(jù)的格式請(qǐng)參照相關(guān)書籍。


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


nba <->'http://datasets./ppg2008.csv', sep=',')
nba <->
row.names(nba) <->
nba <->2:20]
nba_matrix <->
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 繪制帶有測(cè)邊的熱圖


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


側(cè)邊就是一個(gè)顏色梯度條,這里用到 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)的起始點(diǎn),。


但是這段代碼對(duì) heatmap.plus 是不行的,,首先需要將 rc 和 cc 轉(zhuǎn)變?yōu)榫仃嚕囍\(yùn)行下面這段代碼:


rc <- rainbow(nrow(nba_matrix),="" start="">0, end = .3)
cc <- rainbow(ncol(nba_matrix),="" start="">0, end = .3)
rc <->as.character(rc),nrow = 50,ncol = 19)
cc <->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 繪制帶有測(cè)邊的熱圖


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


四,、gplots 包里面的 heatmap.2 包

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


nba <->'http://datasets./ppg2008.csv', sep=',')
nba <->$PTS),]
row.names(nba) <->$Name
nba <->2:20]
nba_matrix <->
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)折點(diǎn),。


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

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


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


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


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


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


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

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


install.packages('heatmaply')
library(heatmaply)
nba <->'http://datasets./ppg2008.csv', sep=',')
nba <->order(nba$PTS),]
row.names(nba) <->Name
nba <->2:20]
nba_matrix <->
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í),,會(huì)顯示該點(diǎn)的數(shù)值。同時(shí),,在右上方可以看到一系列可以調(diào)整的小圖標(biāo),,這些都是可以調(diào)節(jié)的參數(shù)。


nba <->'http://datasets./ppg2008.csv', sep=',')
nba <->$PTS),]
row.names(nba) <->$Name
nba <->2:20]
nba_matrix <->
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 里面的一個(gè) R 包,,安裝的方式與一般 CRAN 上的包的安裝方式不同,,安裝和加載代碼如下:

source('https:///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 繪制熱圖,,可以看這一個(gè)鏈接:

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

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


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


#安裝DOSE
source('https:///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)建的,,有自己獨(dú)特的繪圖風(fēng)格,。其中 lattice 包里面的 levelplot 函數(shù)可以用來繪制熱圖。


library('lattice')
library(latticeExtra)
#準(zhǔn)備nba_matrix矩陣
nba <->'http://datasets./ppg2008.csv', sep=',')
nba <->
row.names(nba) <->
nba <->2:20]
nba_matrix <->
#對(duì)參數(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,] #只對(duì)行聚類(是否對(duì)行,、列聚類)
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)(+)號(hào)創(chuàng)建的,每個(gè)函數(shù)修改屬于自己的部分,。下面參考 R-blogger 上的代碼,,原網(wǎng)頁為:https://www./ggplot2-quick-heatmap-plotting/


嘗試以下代碼:


library(ggplot2)  
library(plyr)
require(reshape2)
require(scales)
nba <->'http://datasets./ppg2008.csv')
nba$Name <- with(nba,="" reorder(name,="">
nba.m <- melt(nba)="">#對(duì)數(shù)據(jù)進(jìn)行融合
nba.m <- ddply(nba.m,="" .(variable),="" transform,="" rescale="">
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./wiki/Binary_number 

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多