「R」ggplot2拼圖包patchwork推薦與使用
生物信息學(xué)習(xí)的正確姿勢
NGS系列文章包括NGS基礎(chǔ)、轉(zhuǎn)錄組分析?(Nature重磅綜述|關(guān)于RNA-seq你想知道的全在這)、ChIP-seq分析?(ChIP-seq基本分析流程)、單細胞測序分析?(重磅綜述:三萬字長文讀懂單細胞RNA測序分析的最佳實踐教程 (原理、代碼和評述))、DNA甲基化分析、重測序分析、GEO數(shù)據(jù)挖掘(典型醫(yī)學(xué)設(shè)計實驗GEO數(shù)據(jù)分析 (step-by-step) - Limma差異分析、火山圖、功能富集)等內(nèi)容。
patchwork是基于ggplot2的拼圖包,因為ggplot2本身沒有強大的拼圖語法,而一般使用的gridExtra與cowplot的拼ggplot2圖形都存在不少問題。
我關(guān)注這個包蠻久了,現(xiàn)在Github上的Star數(shù)已經(jīng)遠超大部分的R包,但似乎還沒有發(fā)布到CRAN。我的工作看似跟作圖相關(guān),寫的博文大多數(shù)也如此,但實際對圖形的掌控力并不咋的,所以還是要多多學(xué)習(xí)。
下面進入正題,掌握好ggplot2與patchwork的基本用法,一般的圖形都可以搞定了,并必要搞的很復(fù)雜。解決問題是關(guān)鍵,認真工作也是關(guān)鍵,畫圖看起來是,其實不是。
安裝
#?需要提取安裝好devtools包,
#?如果你解決安裝和載入包很麻煩,可以試試pacman包,我在簡書寫了介紹和簡單使用
devtools::install_github("thomasp85/patchwork")
導(dǎo)入:
p_load(patchwork)
#?或
#?library(patchwork)
例子
patchwork的使用灰常簡單,使用+把要拼的圖加在一起就可以了。
library(ggplot2)
library(patchwork)
p1?<-?ggplot(mtcars)?+?geom_point(aes(mpg,?disp))
p2?<-?ggplot(mtcars)?+?geom_boxplot(aes(gear,?disp,?group?=?gear))
p1?+?p2

我們不用創(chuàng)建對象,也可以像ggplot2本身使用一樣相加。
ggplot(mtcars)?+
??geom_point(aes(mpg,?disp))?+
??ggplot(mtcars)?+?
??geom_boxplot(aes(gear,?disp,?group?=?gear))

另外,可以使用布局函數(shù)plot_layout對拼接細節(jié)進行更細致地指定,像每個圖的范圍,圖形的排列。
p1?+?p2?+?plot_layout(ncol?=?1,?heights?=?c(3,?1))

如果你想要在圖形之間添加一些空間,可以使用plot_spacer()填充一個空白格。
p1?+?plot_spacer()?+?p2

增加花括號的使用進行嵌套可以布置更復(fù)雜的圖形:
p3?<-?ggplot(mtcars)?+?geom_smooth(aes(disp,?qsec))
p4?<-?ggplot(mtcars)?+?geom_bar(aes(carb))
p4?+?{
??p1?+?{
????p2?+
??????p3?+
??????plot_layout(ncol?=?1)
??}
}?+
??plot_layout(ncol?=?1)
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

括號也是可以的:
p3?<-?ggplot(mtcars)?+?geom_smooth(aes(disp,?qsec))
p4?<-?ggplot(mtcars)?+?geom_bar(aes(carb))
p4?+?(
??p1?+?(
????p2?+
??????p3?+
??????plot_layout(ncol?=?1)
??)
)?+
??plot_layout(ncol?=?1)
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'
高級特性
除了將圖形添加到一起,patchwork定義了一些有意思的操作符,,簡化了上面的嵌套語法。-操作符將左右兩邊的對象放在同一個嵌套層,而不是像+號把右邊放入左邊的嵌套層。
p1?+?p2?+?p3?+?plot_layout(ncol?=?1)
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

p1?+?p2?-?p3?+?plot_layout(ncol?=?1)
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

現(xiàn)在p1+p2與p3在同一嵌套層。
|與/操作符可以用來水平和垂直布局。
(p1?|?p2?|?p3)?/
??????p4
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

子圖多的時候同時修改圖形比較麻煩,patchwork提供了*與&用來簡化代碼,它們都可以將同一個操作應(yīng)用到所有圖形。
(p1?+?(p2?+?p3)?+?p4?+?plot_layout(ncol?=?1))?*?theme_bw()
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

需要注意*只會應(yīng)用到當(dāng)前嵌套層。
p1?+?(p2?+?p3)?+?p4?+?plot_layout(ncol?=?1)?&?theme_bw()
##?`geom_smooth()`?using?method?=?'loess'?and?formula?'y?~?x'

&可以用遞歸的方式應(yīng)用到所有層面。
往期精品(點擊圖片直達文字對應(yīng)教程)
后臺回復(fù)“生信寶典福利第一波”或點擊閱讀原文獲取教程合集




























