群眾紛紛表示圖二是Excel畫的,,我覺得也是,!Excel是生物學(xué)家的最愛啊。雖然做生信的人都看不上,,最主要是沒有記錄,,不具備可重復(fù)性。但現(xiàn)實就是大家都愛Excel,。 如果我們在R里打命令
曾經(jīng)有人問我,,用R畫熱圖怎么改顏色,我的回答是無能為力(沒說怎么畫,,我怎么能夠知道怎么改),。孔乙己老先生告訴我們回字有四樣寫法,,而R畫熱圖,,豈止4種?;赽ase graphics有 對于R代碼無感的話,還有 基于grid graphics比較有名的有 比如我這樣畫一個熱圖: d = data.frame(matrix(rnorm(100), ncol=10))colnames(d) = paste0('t', 1:10)rownames(d) = paste0('g', 1:10)library(pheatmap)pheatmap(d) -> x 基本上我們發(fā)文章,圖都是有多個panel拼起來的,,這個pheatmap的輸出,,就可以用cowplot來拼,比如這里我用ggplot2畫個散點圖,,然后拼在一起,。 p = ggplot(d, aes(t1, t2)) + geom_point(size=5)plot_grid(x$gtable, p, labels=c('A', 'B')) 就是這么簡單,當(dāng)然你還可以基于gtable進行操作,,修改各種細(xì)節(jié),。 這里我不得不吐槽一下,很多人認(rèn)為R有四套畫圖系統(tǒng): base,、grid,、ggplot2、lattice,。然后認(rèn)為ggplot2最牛逼,,天天ggplot2打遍天下無敵手一樣,,這就是沒見過世面啊?。▏?yán)格說lattice和ggplot2不能算圖形系統(tǒng)) 試問ggplot2他爹是誰,?ggplot2和lattice都是基于grid。現(xiàn)在我們ggplot2出圖后各種高級玩法,、以及我們自己寫ggplot2圖層,,都是用grid!很多人認(rèn)為cowplot是拼ggplot2的,, 我能寫出ggimage和ggtree包,,能夠一次解決ggplot2所有字體,,都是因為懂一點grid。如果你對R語言的畫圖系統(tǒng)蒙圈的話,,建議你讀一下《樹變圖,,圖變樹?》這一篇文章,。 這里并沒有否定ggplot2的意思,,雖然grid更靈活,能做更多的事情,,但ggplot2是我們的最愛,,因為ggplot2所實現(xiàn)的語法,是人類友好的,,讓我們站在更高的角度,可以更加抽象地思考畫圖,。但很多人不會用ggplot2畫熱圖,,因為ggplot2對tidy data的要求與熱圖的matrix是相悖的,我們可視化出來和matrix是對應(yīng)的,,但ggplot2要求我們把matrix,,轉(zhuǎn)化成長型的data.frame。雖然有很多熱圖的實現(xiàn),,但很多人還是想用ggplot2來出圖,,因為語法簡單,用theme好操作細(xì)節(jié),。 這里簡單介紹一下我很多年前寫的一個簡單的函數(shù),。在DOSE包里,,我寫了一個 默認(rèn)會打印出數(shù)字,,在矩陣比較小的時候,,還是比較好的,如果你不想打印出來,,可以用 我們可以很容易地?fù)Q配色方案,比如用類似于pheatmap的風(fēng)格: library(RColorBrewer)colorRampPalette(rev(brewer.pal(n = 7, name = 'RdYlBu'))) -> ccsimplot(d) + scale_fill_gradientn(colors=cc(100)) 再比如圖例我們嫌太短了,,想拉長一點: simplot(d) + scale_fill_gradientn(colors=cc(100)) + theme(legend.key.height=unit(5, 'line')) 有了這個simplot函數(shù),,一鍵出圖,然后再用ggplot2改細(xì)節(jié),,再也不要說不會用ggplot2畫熱圖了,。 CitationG Yu, LG Wang, GR Yan, QY He. DOSE: an R/Bioconductor package for Disease Ontology Semantic and Enrichment analysis. Bioinformatics 2015, 31(4):608-609. |
|