R繪圖 第三篇:布局(gridExtra)


在繪圖時,有時候會遇到這樣一種情景,客戶想把多個代表不同KPI的圖形分布到同一個畫布(Page)上,而且每一個圖形都是單獨繪制的。對於這種需求,可以使用gridExtra包來實現,gridExtra包能把圖形逐個地添加到畫布中,並按照業務的需求,把圖形擺放到合適的位置上去。在布局完成之后,把圖形繪制出來。也就是說,gridExtra用於把幾張圖拼成一組圖,可以把ggplot2繪制的多張圖形組合到一個大圖中。通常情況下,gridExtra包常用於控制圖形的復雜布局和繪制文本表,本文簡單介紹gridExtra包的布局功能。

一,友好函數

gridExtra提供用於布局的友好函數:

arrangeGrob(..., grobs = list(...), layout_matrix, vp = NULL,
name = "arrange", as.table = TRUE, respect = FALSE, clip = "off",
nrow = NULL, ncol = NULL, widths = NULL, heights = NULL, top = NULL,
bottom = NULL, left = NULL, right = NULL, padding = unit(0.5, "line"))

grid.arrange(..., newpage = TRUE)

這兩個函數的區別是:arrangeGrob()返回未繪制的grob,而grid.arrange()函數在當前的設備上繪圖圖形。

參數注釋:

  • ...:grobs、ggplot、lattice等grob(圖形對象)
  • grobs:對象對象的list
  • layout_matrix:表示布局的矩陣

gridExtra是grid包的友好版本,在grid包中,grob是一個可編輯的繪圖對象,grob是graphical object兩個單詞的前兩個字符的組合。常用於表示ggplot對象,lattice等高級圖形系統創建圖形對象。

二,gridExtra布局的基本用法

grid.arrange()函數,不僅能夠控制個數已知的圖形布局,還能對控制未知個數的圖形布局,功能十分強大。

1,控制多個grob的布局

把ggplot2和lattice繪制的圖形對象,分兩列,並排顯示:

library(gridExtra)
library(ggplot2)
library(lattice)

p <- qplot(1,1)
p2 <- xyplot(1~1)   ##lattice包

grid.arrange(p,p2,ncol = 2)

2,控制grob列表的布局

把繪圖對象添加到列表中,並把該列表傳遞給grid.arrange()函數的grobs參數:

library(gridExtra)
library(ggplot2)
library(lattice)

gs <- list(NULL)
gs[[1]] <- qplot(1,1)
gs[[2]] <- xyplot(1~1)   ##lattice包

grid.arrange(grobs=gs,ncol = 2)

3,使用矩陣設置復雜布局

各個圖形對象排放的位置,可以通過布局矩陣(layout_matrix)來控制:

lay <- rbind(c(1,1,1,2,3),
             c(1,1,1,4,5),
             c(6,7,8,9,9))

grid.arrange(grobs = gs,layout_matrix = lay)

三,在圖形內部繪圖

ggplot2包中有一個用於創建grob對象的函數,參數x是一個ggplot對象:

ggplotGrob(x)

我們可以通過添加注釋(annotate)的方式,向一個圖形內部添加一個圖形:

annotation_custom(grob, xmin = -Inf, xmax = Inf, ymin = -Inf,  ymax = Inf)

例如:向大圖形中添加一個小圖形:

library(gridExtra)
library(ggplot2)

g <- ggplotGrob(qplot(1, 1) +
      theme(plot.background = element_rect(colour = "black")))
qplot(1:10, 1:10) +
  annotation_custom(
    grob = g,
    xmin = 1, xmax = 5, ymin = 5, ymax = 10
  ) 

 

參考文檔:

Package gridExtra

Laying out multiple plots on a page


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM