R | ggplot2拼圖 —— patchwork

在Y叔公號(biobabble)看到cowplot乃舊愛,patchwork是新歡一文后,覺得甚是有趣,便動手復(fù)現(xiàn)了一下。

據(jù)patchwork的作者 Thomas Pedersen所介紹,他開發(fā)的初衷就是讓ggplots的組合可以ridiculously simple!

The goal of patchwork is to make it ridiculously simple to combine separate ggplots into the same graphic. As such it tries to solve the same problem as gridExtra::grid.arrange() and cowplot::plot_grid but using an API that incites exploration and iteration.

我使用后的感覺也是如此, patchwork可讀性高、操作簡單、可操作性也高,真的太強(qiáng)了。下面簡單介紹一下這個包吧

安裝

由于這個包還沒發(fā)布到CRAN上,所以直接用install.packages()是安裝不了的,要使用以下方法安裝
devtools::install_github("thomasp85/patchwork")

更新于 2020-12-29
patchwork 已經(jīng)發(fā)布了有一段時間了,可以直接通過以下命令安裝

install.packages('patchwork')

當(dāng)然也可以繼續(xù)用devtools::install_github("thomasp85/patchwork")的方法安裝開發(fā)版本(不建議)

語法

patchwork使用的語法十分簡單,就是用+就可以按行將圖拼起來,而/是按列拼圖,使用|分隔后可以同時使用兩種方法拼圖。

下面我們畫幾張圖試試

p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp, colour = mpg, size = wt)) +
  ggtitle('p1')

p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) +
  ggtitle('p2')

p3 <- ggplot(mtcars) + 
  geom_point(aes(hp, wt, colour = mpg, size = wt)) + 
  scale_colour_viridis_c() +
  ggtitle('p3')

p4 <- ggplot(mtcars) + 
  geom_smooth(aes(disp, qsec)) +
  ggtitle('p4')

p5 <- ggplot(mtcars) + 
  geom_bar(aes(carb)) +
  ggtitle('p5')

橫拼

可以通過+|實(shí)現(xiàn),兩者都是按row合并的

p1 + p2
p1 + p2

還可以通過plot_spacer()在圖與圖之間插入空白,實(shí)現(xiàn)ggplot的九宮格!

p1 + plot_spacer() + p2 +
  plot_spacer() + p3 + plot_spacer() +
  p4 + plot_spacer() + p5
Nine Palace Grid

豎拼

豎著拼也很簡單,就是一個/就完事了,有點(diǎn)分式的意思

p2/p4
p2/p4

一起拼

如果想同時實(shí)現(xiàn)兩種拼圖的語法,用|即可完成了

(p2/p4)|p3
(p2/p4)|p3

方便的注釋

patchwork還提供了一個plot_annotation的功能,可以允許我們在給拼起來的圖加title的前提下,還能為每一個subplot加上一個tag,效果如下:

p1 + p2 + plot_annotation(title = "combine", tag_levels = "A")

這個功能在生成文章的figure的時候就很有用了

復(fù)雜的拼圖

以上我們所做的都是在網(wǎng)格上一個個格子地拼圖的,當(dāng)然,patchwork也可以通過設(shè)定layout實(shí)現(xiàn)指定每個圖所占的格子來拼,容許了更高的操作自由度

layout <- "
BBBB
AACC
##CC
"
p4 + p2 + p3 +
  plot_layout(design = layout)

以上的#是空白,ABC就代表了輸入中相應(yīng)的圖

控制legend

patchwork可以通過指定plot_layout(guide = 'collect')將legend都放到圖的一側(cè)

(p2 | (p1/p3)) + plot_layout(guides = 'collect')

有趣的是,盡管我們的mpglegend都是對mpg上色,但僅因?yàn)轭伾成涞姆椒ú灰粯?,就分別列了出來。所以,這個guides = 'collect'不僅僅只是收集legend,它是在進(jìn)行了legend的比較之后,才放出來的。

總而言之,patchwork是個十分方便且強(qiáng)大的ggplots拼圖工具,而且尚在開發(fā)之中,意味著以后可能還會有更多更強(qiáng)大的功能出現(xiàn),有需要的朋友就趕緊用起來吧!

參考:
1 cowplot乃舊愛,patchwork是新歡
2 https://www.rdocumentation.org/packages/patchwork/versions/0.0.1.9000

完。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容