我相信大家在看文章的時候都見過下面這樣的圖脐供,這張圖實際上是由5張子圖經(jīng)過排版而拼接起來的。
一般發(fā)文章的時候酌壕,編輯也會要求你將相關(guān)的圖拼接在一起來說明同一個問題,不會讓你單獨放5張figure卵牍。傳統(tǒng)的做法就是用AI(Adobe illustrator)或者PS(photoshop)來進行拼接了,如果大家有更好的工具歡迎下方留言辛掠。今天小編就給大家介紹一個R包patchwork,作圖萝衩,拼圖,排版一氣呵成欠气。下面我們舉例說明
首先我們需要先安裝這個R包
#安裝patchwork這個包
install.packages("devtools")
library(devtools)
install_github("thomasp85/patchwork")
接下來我們有R自帶的mtcars這套數(shù)據(jù)來舉例镜撩,先生成四張分別的圖片
#加載ggplot2和patchwork包
library(ggplot2)
library(patchwork)
?
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
ggtitle('A')
第一張圖A, 為散點圖
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('B')
第二張圖B,為箱型圖
p3 <- ggplot(mtcars) +
geom_smooth(aes(hp, wt)) +
ggtitle('C')
第三張圖C宜鸯,為擬合曲線
p4 <- ggplot(mtcars) +
geom_bar(aes(gear)) +
facet_wrap(~cyl) +
ggtitle('D')
第四張圖D遮怜,為柱形圖
接下來我們來看看如何拼圖和排版
1.全部水平排放淋袖,+的使用
p1+p2+p3+p4+plot_layout(nrow=1)
這里需要注意锯梁,如果想四張圖都排在一排,這里一定要使用plot_layout(nrow=1)或者plot_layout(ncol=4)來指定行數(shù)是1或者列數(shù)是4剥懒。否則會得到如下的圖
p1+p2+p3+p4
原因是合敦,在使用+的時候初橘,如果什么都不指定充岛,patchwork默認會盡量使最后的圖片呈現(xiàn)為方形,是不是很方~~~
2. 全部垂直排布夜只,/的使用
p1/p2/p3/p4
當(dāng)然這里也可以使用+來實現(xiàn)全部垂直排布蒜魄,只需要指定plot_layout(ncol=1)就可以了
p1+p2+p3+p4+plot_layout(ncol=1)
是不是很方便
3. 第一行兩張圖爪膊,第二行一張圖,—的使用
p1+p2-p3+plot_layout(ncol=1)
會得到下面這張圖
這里也可以通過下面的方法實現(xiàn)推盛,條條大路通羅馬
(p1+p2)/p3
4.第一行三張圖谦铃,第二行一張圖,|和/的使用
(p1|p2|p3)/p4
我試了下驹闰,好像|換成+也可以∈γ睿可能是|看上去更容易理解一些吧屹培!如果有小伙伴發(fā)現(xiàn)了其中的奧秘默穴,歡迎留言討論褪秀。
5. 第一行兩張圖,第二行兩張圖
這個其實前面講過媒吗,直接用+就可以實現(xiàn),接下來我們用/和|來實現(xiàn)
(p1|p2)/(p3|p4)
6.第一列三張圖锯岖,第二列一張圖
(p1/p2/p3)|p4
7.自由發(fā)揮
其實理解了這里的幾個符號(+甫何,-,|沛豌,/)的用法之后,可以自由發(fā)揮加派,各種排列組合跳芳。
p1 + (
p2 + (
p3 + p4 +plot_layout(ncol=1)
)
) + plot_layout(ncol=1)
我們來理解一下代碼。首先圖C和圖D合并成一列娄琉,再和圖B并排成一行次乓,然后再和圖A合并成一列孽水,就可以得到下面這張圖啦!
8.空白占位圖的使用
有時候排版的需要女气,我們需要留出一些空白來,patchwork里面就提供這樣一個空白的占位圖plot_spacer()
(plot_spacer()+p1+plot_spacer())/ (p2+p3+p4)
這里我們使用了plot_spacer()在第一行圖A的左右兩側(cè)分別留出了兩個空位缘滥。
今天的分享就先到這里谒主,后面會再分幾期分別給大家介紹圖片寬度和高度的調(diào)節(jié),以及一些更高級的排版方法霎肯,敬請期待!