0
我試圖創建一個自動化的圖形功能和對使用grid.arrange
使用gridExtra
在這裏,在ggplot2
從列表佈局圖的幾個問題清單創建ggplot圖的網格的玩具數據
set.seed(1234)
df <- data.frame(rep(NA,20))
for (i in 1:6) df[,i] <- rnorm(20, 0, 3)
names(df) <- paste("a", 1:6, sep = "")
現在根據是否存在參數創建一個簡單的圖形函數,在這種情況下是否將一個註釋添加到圖形中(注意:我這樣做是爲了將我的真實工作流程表示爲儘可能接近)
gFunct <- function (vec, note = NULL) {
if(is.null(note)) {
g <- ggplot(df, aes_string(vec)) + geom_histogram()
return(g)
} else {
g <- ggplot(df, aes_string(vec)) + geom_histogram() + annotate("text", x = 0, y = 3, label = note)
return(g)
}
}
現在創建兩個列表
nameList <- names(df)
noteList <- list(a1 = NULL, a2 = "hey", a3 = "hey there", a4 = NULL, a5 = NULL, a6 = "there")
現在通過這些名單進入圖形功能通過foreach
功能
library(foreach)
gg <- foreach(x = nameList, y = noteList) %do% gFunct(x,y)
我們得到什麼,當我們要求gg
是圖列表,索引[[idx]]
。我想知道兩件事
(1)如何將這些傳遞到grid.arrange
而無需在繪圖函數中將它們轉換爲grobs。目前,我收到一條錯誤消息,說only 'grobs' allowed in "gList"
,但在其他場合,我不需要將ggplot2
圖轉換成grobs,將它們傳遞到grid.arrange
。 (2)撇開grob問題,有沒有辦法將整個列表傳遞到grid.arrange
而不必手動列出每個圖表?換句話說,我希望能夠與
gridExtra::grid.arrange(gg, ncol = 3)
而不是
gridExtra::grid.arrange(gg[[1]], gg[[2]], gg[[3]], gg[[4]], gg[[5]], gg[[6]], ncol = 3)
不知道這是你在找什麼,但你有沒有試過'marrangeGrob創建圖形的矩陣( gg,ncol = 3,nrow = 2)'? – GGamba
'marrangeGrob'用於多頁面安排。如果你想把這些圖全部放在一個頁面上,那麼使用'grid.arrange'。要將plot對象列表傳遞給任一函數,請使用'grobs'參數:'grid.arrange(grobs = gg,ncol = 3)'。 – eipi10