R可視化:'patchwork:合并多個R圖的包'

'patchwork:合并多個R圖的包'

patchwork是基于gglot2的拼圖包,它使得基于ggplot2的圖形更容易拼接在同一個圖層。

安裝

因為作者僅僅在GitHub發布了patchwork,因此無法使用install.packages("patchwork")從CRAN處獲取。為了獲取該包,首先應該安裝devtools包,其次在使用如下命令:

# install.packages("devtools")
library(devtools)
install_github("thomasp85/patchwork")

加載數據

使用R自帶的mtcars數據,先使用ggplot2作圖:

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars, aes(x=mpg, y=disp))+ geom_point()
p2 <- ggplot(mtcars, aes(x=gear, y=disp, group = gear))+ geom_boxplot()
p3 <- ggplot(mtcars, aes(x=disp, y=qsec))+ geom_smooth()
p4 <- ggplot(mtcars, aes(x=carb))+ geom_bar()

+ 疊加圖

p1 + p2 + p3 + p4
# (p1 + p2 + p3 + p4)+ plot_layout(ncol =1) # plot_layout 控制拼圖水平布局

- 子軌道

# - 符號左右圖形位于不同圖層 
(p1 + p2 + p3) - p4 # (p1 + p2 + p3) 和p4分別占用兩個相同大小的軌道
#(p1 + p2 + p3) - p4 + plot_layout(ncol=1) # 控制列數

| 水平布局

(p1 | p2 | p3 | p4) # 四個圖分布在四個不同的圖層
#(p1 + p2 + p3 + p4) # 四個圖分布在同一個圖層,且自動分成兩列,每列2個圖

/垂直布局

(p1 | p2)/(p3 | p4) # 括號內是水平布局,/則是垂直布局,和p1+p2+p3+p4類似

*& 同一操作應用所有圖形

(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw() # 只會應用到當前嵌套層 p1 p4
(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) & theme_bw() # 所有圖形

{} 或者 () 嵌套布局圖形

p1 + {
  p2 + {
    p3 +
      p4 +
      plot_layout(ncol=1)
  }
} + 
  plot_layout(ncol=1)


p1 + (
  p2 + (
    p3 + p4 + plot_layout(ncol=1)
  )
) + 
  plot_layout(ncol=1)

plot_layout 調節拼接細節

p1 + p2 + plot_layout(ncol = 1, heights = c(2, 1))

plot_spacer 添加空白

p1 + plot_spacer() + p2

plot_annotation 設置title,subtitles 和 captions

patchwork <- (p1 + p2) / p3 # patchwork[[1]] = p1 + p2 圖層1;patchwork[[1]] = p3
patchwork + plot_annotation(
  title = 'The surprising truth about mtcars',
  subtitle = 'These 3 plots will reveal yet-untold secrets about our beloved data-set',
  caption = 'Disclaimer: None of these plots are insightful',
  tag_levels = 'A' # 添加標簽
) & theme(plot.tag = element_text(size = 8))

# 對圖層1兩子圖編碼 A1 和 A2
patchwork[[1]] <- patchwork[[1]] + plot_layout(tag_level = 'new')
patchwork + plot_annotation(tag_levels = c('A', '1'))

# 對圖注進行編碼 Fig.A.1: Fig.A.2: Fig.B:
patchwork + plot_annotation(tag_levels = c('A', '1'), tag_prefix = 'Fig. ',
                            tag_sep = '.', tag_suffix = ':')

控制legend

p1 <- ggplot(mtcars, aes(x=mpg, y=disp, colour = mpg, size = wt))+ 
  geom_point()
p2 <- ggplot(mtcars %>% mutate(gear=factor(gear)), aes(x=gear, y=disp, group = gear, color = gear))+
  geom_boxplot()
# 指定guides='collect',把legend都給集中在圖的一側
# guide_area() 圖例單獨放在一個格子
(p3 | (p1 / p2)) + 
    plot_layout(guides = 'collect') +  
  guide_area() 

總結

cowplot包相比,patchwork包更適合基于ggplot2的產生的圖形,它的布局更加簡潔,語法簡單

參考

  1. patchwork
  2. patchwork拼圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。