изменить порядок переноса фасетов с конечных на ведущие пустые панели - PullRequest
2 голосов
/ 03 февраля 2020

По умолчанию, facet_wrap будет иметь конечные пустые панели, если количество уровней не заполняет сетку. Можем ли мы переключить его на ведущие пустые панели? Например, в приведенном ниже минимальном коде я бы хотел, чтобы панель «а» была единственной в первом ряду, а панель «g» была единственной в последнем.

Есть ли более простой способ, чем жесткое программирование каждой панели из объекта ggplotGrob?

foo <- data.frame(x = rnorm(210), y = rnorm(210), z = letters[1:7])

ggplot(foo, aes(x = x, y = y)) +
  geom_point() +
  facet_wrap(~z)

1 Ответ

1 голос
/ 05 февраля 2020

Не совсем с использованием фасета, но здесь есть еще один вариант использования пакета 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...