2017-02-08 21 views
2

Я пытаюсь построить произвольное количество барных закладок с rmarkdown, разделенных двумя столбцами. В моем примере будет 20 всего участков, так что я в надежде получить 10 участков в каждой колонке, однако, я не могу показаться, чтобы получить эту работу с grid.arrangeпроизвольное количество графиков для 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 я м получает следующий вывод:

enter image description here

Я надеялся, я хотел бы получить что-то вдоль линий:

enter image description here

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

+0

Проверьте это: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/ – GarAust89

+3

'grid.arrange (grobs = lapply (1:20, функция (i) ggplot()), ncol = 2) 'должен работать, но вам нужно изменить размер устройства, чтобы ясно видеть графики и легенды. – baptiste

+1

' do.call (grid.arrange, c (ggcluster, list (ncol = 2))) 'Это работает для меня, будучи ggcluster списком объектов ggplot. Количество элементов ggplot в списке различается в любом вхождении цикла – pacomet

ответ

0

Если у вас есть все объекты 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) 

enter image description here