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

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

一,友好函數

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

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等高級圖形系統建立圖形對象。spa

二,gridExtra佈局的基本用法

grid.arrange()函數,不只可以控制個數已知的圖形佈局,還能對控制未知個數的圖形佈局,功能十分強大。code

1,控制多個grob的佈局htm

把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列表的佈局blog

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

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

相關文章
相關標籤/搜索