Я пытаюсь создать автоматизированную функцию построения графиков и есть несколько вопросов о прокладке графиков из списков в ggplot2
с помощью grid.arrange
Создание сетки ggplot графиков из списка с помощью gridExtra
Вот игрушка данные
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». Чтобы передать список объектов сюжета в любую из функций, используйте аргумент 'grobs':' grid.arrange (grobs = gg, ncol = 3) '. – eipi10