ggplot2 facet_wrap с двумя вложенными переменными: использовать разные strip.position / switch для каждой переменной? - PullRequest
1 голос
/ 30 сентября 2019

Я делаю ggplot, где я использую facet_wrap с двумя переменными, скажем, первое var_1 со значениями A / B, второе var_2 с 1/2, что приводит к четырем аспектам, A-1, A-2, Б-1, Б-2. Я бы хотел, чтобы заголовок var_1 A / B отображался сверху, а var_2 1/2 - сбоку. Делая это с facet_wrap(~dim_1 +dim_2, ncol=1), кажется, однако, что аргумент strip.position будет применять одну и ту же позицию для обоих? Другой подход может заключаться в использовании facet_grid() (который действительно нужен, чтобы иметь фасеты как горизонтальные, так и вертикальные), но не позволяет устанавливать количество строк / столбцов!?

Код ниже, с фактическим выводоми то, что я хочу иметь!

library(ggplot2)

df <- data.frame(dim_1 = rep(c("A", "B"), each=4),
                 dim_2 = rep(c("1", "2"), times=4),
                 x = rnorm(8), y = rnorm(8))

p <- ggplot(aes(x=x, y=y), data=df) +
  geom_point()


p+
  facet_wrap(~dim_1 +dim_2, ncol=1, strip.position = c("left"))

Создано в 2019-09-29 пакетом Представить (v0.3.0)

1 Ответ

2 голосов
/ 30 сентября 2019

Я не знаю, как это сделать в самом ggplot, но другой подход - объединить два графика, используя patchwork:

library(patchwork)
myplot <- function(section = "A") {
  ggplot(subset(df, df$dim_1 == section), aes(x,y)) + 
    geom_point() +
    # coord_cartesian(xlim = c(min(df$x), max(df$x))) +   # To get single x scale between all plots
    facet_grid(dim_2~dim_1, switch = "y") 
}
myplot("A") / myplot("B")

enter image description here

...