題目有感于德國天才數(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的可以約起 什么是 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, 其中括號(hào)中的都是可調(diào)整的參數(shù),初步統(tǒng)計(jì)了一下,,至少包含 23 項(xiàng)參數(shù),,但是每一次繪制熱圖時(shí),其實(shí)只需要部分參數(shù)即可完成繪圖,。參數(shù)中比較重要的參數(shù)是:
以下我們通過一個(gè)簡(jiǎn)單的案例來嘗試一下。 案例來源:http:///2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/ #首先要獲得數(shù)據(jù),,直接用read.csv導(dǎo)入具有逗號(hào)分隔符的表格 注意:(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, 我們進(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包 要查看一個(gè)包或者一個(gè)包里面函數(shù)的詳細(xì)介紹,代碼為: ?pheatmap #查看pheatmap包里面的詳細(xì)介紹 與 heatmap 類似的是,,pheatmap 也可以同時(shí)繪制熱圖和系統(tǒng)樹圖,,同樣需要矩陣格式的原始輸入,,需要用 scale 進(jìn)行標(biāo)準(zhǔn)化,,需要顏色;但不同的是,,是否需要行或列的系統(tǒng)樹圖的表達(dá)方式不同,,前者是 nba_heatmap - pheatmap(nba_matrix, 圖 3. 用 pheatmap 繪制熱圖 果然,pheatmap 一出手就不同凡響,,信息要比 heatmap 更多,。根據(jù)這幅圖,,我們?cè)俚雇嘶厝タ?pheatmap 函數(shù)中的一些關(guān)鍵參數(shù),。
三,、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=',') 圖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) 圖 6. 用 heatmap.plus 繪制帶有測(cè)邊的熱圖 pheatmap繪制帶有側(cè)邊的更合適,,具體見 R語言學(xué)習(xí) - 熱圖簡(jiǎn)化,, 最簡(jiǎn)單漂亮的免費(fèi)在線生信繪圖工具。 四,、gplots 包里面的 heatmap.2 包 按照慣例,,我們還是試一試下面的代碼: nba <->'http://datasets./ppg2008.csv', sep=',') 得到如下圖: 圖 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, 你會(huì)得到以下這幅圖,這幅圖看起來普普通通,,但是神奇之處是當(dāng)你鼠標(biāo)落到任一色塊時(shí),,可以顯示當(dāng)前色塊的數(shù)值。 圖 8. d3heatmap 繪制的交互式熱圖 六,、heatmaply 包里面的 heatmaply 函數(shù) heatmaply 也是交互式的,。嘗試以下代碼: install.packages('heatmaply') 圖 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=',') 注意這里的書寫方式,,已經(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') ComplexHeatmap 包里面用于繪圖的函數(shù)也叫做 Heatmap,注意這里的 H 是大寫,。 具體的參數(shù)可用 ?ComplexHeatmap::Heatmap 進(jìn)行查詢,,試一下以下這段代碼: Heatmap(nba_matrix, cluster_rows = TRUE, 圖 11. 用 Heatmap 繪制的熱圖 這樣也是可以得到類似于基礎(chǔ)安裝里面的 heatmap 的,。
另外,,看到 Y 叔(生信領(lǐng)域有名的 Y 叔)關(guān)于熱圖的總結(jié),,利用 Y 叔寫的 simplot 函數(shù),可用于可視化相似性矩陣,。試著對(duì) nba_matrix 做了一下相似性分析,,由于數(shù)據(jù)有 50 行,因此只能把標(biāo)簽和字體尺寸調(diào)到非常小,,才勉強(qiáng)可以看見,。 #安裝DOSE 圖 12. 用 simplot 進(jìn)行相似性分析 九、Lattice包里面的 levelplot 函數(shù) Lattice 包是基于 grid 創(chuàng)建的,,有自己獨(dú)特的繪圖風(fēng)格,。其中 lattice 包里面的 levelplot 函數(shù)可以用來繪制熱圖。 library('lattice') 圖 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) 圖 14. 用 ggplot 繪制的熱圖
封面圖來源于Wikipedia: https://en./wiki/Binary_number 如果看完代碼還不會(huì)的,,可以參加我們的視頻課 http://bioinfo.ke.qq.com,;或點(diǎn)擊原文使用線上版,各種繪圖,。 |
|