在繪圖時,有時候會遇到這樣一種情景,客戶想把多個表明不一樣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()函數在當前的設備上繪圖圖形。函數
參數註釋:佈局
gridExtra是grid包的友好版本,在grid包中,grob是一個可編輯的繪圖對象,grob是graphical object兩個單詞的前兩個字符的組合。經常使用於表示ggplot對象,lattice等高級圖形系統建立圖形對象。spa
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 )
參考文檔: