Не совсем с использованием фасета, но здесь есть еще один вариант использования пакета patchwork
, который дает вам очень аккуратный контроль над панелями вашего графика.
Конечно, это повторяет названия и метки всех осей, так что это, вероятно, не совсем идеально. Но возможен вариант.
library(tidyverse)
library(patchwork)
foo <- data.frame(x = rnorm(210), y = rnorm(210), z = letters[1:7])
list_plots <- map(.x = foo %>% group_split(z), .f = ~ ggplot(foo, aes(x = x, y = y)) +
geom_point())
layout_p <- '
##A
BCD
EFG
'
wrap_plots(list_plots, design = layout_p)
Создано в 2020-02-05 пакетом prex (v0.3.0)
Более программный подход c заключается в том, чтобы установить только количество строк, в данном примере nrow = 2
nrow <- 2
# how many actual panels
n_panel <- length(unique(foo$z))
# calculate numbers of columns
ncol <- ifelse(n_panel %% nrow == 0, n_panel %/% nrow, n_panel %/% nrow+1)
# calculate number of leading empty panels
n_lead <- nrow*ncol - n_panel
# letters for the design argument in wrap_plots
plot_letters <- LETTERS[seq_along(unique(foo$z))]
# make a vector which can be cut into pieces of ncol length
x <- paste(c(rep('#',n_lead), plot_letters), collapse = '')
# cut into ncol pieces and add linebreaks
layout_l <- paste0('\n', substring(x, seq(1, nchar(x), ncol), seq(ncol, nchar(x), ncol)), collapse = '')
wrap_plots(list_plots, design = layout_l)
Создано в 2020-02-05 пакетом представ. (v0.3.0)