#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть функция, которая автоматически генерирует длинный список граненых ggplots с использованием facet_grid
. Теперь я хотел бы дополнительно «разбить» эти фасетные графики на блоки размером 3×5, эквивалентные страницам размером с буквы, чтобы они могли служить физическим справочным материалом. Возможно ли сгенерировать такие макеты в ggplot?
[Я надеюсь, что нет необходимости предоставлять повторное выражение для этой проблемы. Я считаю, что вопрос довольно ясен, и я не ищу прямого решения — было бы полезно просто указать правильное направление или избежать бессмысленной кроличьей норы.]
Комментарии:
1. Проверьте пакет patchwork — он очень удобен для пользователя и должен иметь именно ту функциональность, которая вам нужна.
2. Потрясающе! Спасибо. Еще предстоит изучить, но выглядит очень полезным
Ответ №1:
Еще раз спасибо @A.S.K. Пакет patchwork — это именно то, что мне было нужно.
require(ggplot2)
require(patchwork)
# using lapply with ggplot
df <- data.frame(x=c("a", "b", "c"), col1=c(1, 2, 3), col2=c(3, 2, 1), col3=c(4, 2, 3))
cols <- colnames(df[2:4])
myplots <- vector('list', 3)
plot_function <- function(y_column, data) {
ggplot(data, aes_string(x="x", y=y_column, fill = "x"))
geom_col()
labs(title=paste("lapply:", y_column))
}
myplots <- lapply(cols, plot_function, df)
# using patchwork for layout
patch1 <- myplots[[1]] myplots[[2]] / myplots[[3]] plot_layout(guides = 'collect')
patch2 <- myplots[[1]] / ( myplots[[3]] | myplots[[2]] ) theme_grey() plot_layout(guides = 'collect')
patch1 / patch2
Теперь мне просто нужно разобраться, как программно сгенерировать макет из списка и понять параметры макета, чтобы графики красиво заполняли страницу размером с букву. Но это было намного проще, чем я надеялся.