произвольное количество участков для grid.arrange

Я пытаюсь построить произвольное количество гистограмм с rmarkdown, разделенным двумя столбцами. В моем примере будет всего 20 графиков, поэтому я надеялся получить по 10 графиков в каждом столбце, однако я не могу заставить это работать с grid.arrange

plot.categoric = function(df, feature){
  df = data.frame(x=df[,feature])
  plot.feature = ggplot(df, aes(x=x, fill = x)) + 
    geom_bar() +
    geom_text(aes(label=scales::percent(..count../1460)), stat='count', vjust=-.4) +
    labs(x=feature, fill=feature) +
    ggtitle(paste0(length(df$x))) +
    theme_minimal()
  return(plot.feature)
}


plist = list()
for (i in 1:20){
  plist = c(plist, list(plot.categoric(train, cat_features[i])))
}

args.list = c(plist, list(ncol=2))
do.call("grid.arrange", args.list)

Когда я связываю это с html, я получаю следующий вывод:

введите здесь описание изображения

Я надеялся, что получу что-то вроде:

введите здесь описание изображения

но даже с этим размеры фигурок все еще странные, я пробовал играть с heights и widths, но все равно не повезло. Извините, если это длинный вопрос


person ghost    schedule 08.02.2017    source источник


Ответы (1)


Если у вас есть все объекты ggplot в списке, вы можете легко построить графику из двух столбцов с помощью gridExtra::grid.arrange. Вот простой пример, который поместит восемь изображений в матрицу 4x2.

library(ggplot2)
library(gridExtra)

# Build a set of plots
plots <-
  lapply(unique(diamonds$clarity),
         function(cl) {
           ggplot(subset(diamonds, clarity %in% cl)) +
           aes(x = carat, y = price, color = color) +
           geom_point()
         })

length(plots)
# [1] 8

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

введите здесь описание изображения

person Peter    schedule 31.05.2017