Я хотел бы создать график с ggplot2::facet_wrap
или facet_grid
с вложенными графиками, использующими ggforce::facet_zoom
.
Я также был бы достаточно счастлив выстроить их таким же образом, как facet_grid
, желательно с текстовыми метками на полосах, но также не совсем вижу способ заставить это работать.
Например, граненый сюжет
library(ggplot2)
library(ggforce)
library(dplyr)
p1 <- ggplot(mtcars) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_wrap(
facets = ~cyl,
nrow = 2,
scales = "free_y"
)
p1
![](https://i.imgur.com/6RAgaFs.png)
Но каждый фасет должен быть таким (это первый фасет выше):
zoomlims <- data.frame(
cyl = c(4, 6, 8),
lower = c(27, 18, 13),
upper =c(32, 21, 17)
)
p2a <- ggplot(mtcars %>% filter(cyl == 4)) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_zoom(
ylim = c(zoomlims$lower[1], zoomlims$upper[1]),
zoom.size = 1
)
p2a
![](https://i.imgur.com/vX1Phas.png)
В идеале один вызов фасета будет принимать все аргументы для увеличения и обернуть, но они этого не сделают, и вызов одной фасетной функции за другой просто переопределяет предыдущую, например, увеличение второй
p3a <- ggplot(mtcars) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_wrap(
facets = ~cyl,
nrow = 2,
scales = "free_y"
) +
facet_zoom(
ylim = c(zoomlims$lower, zoomlims$upper),
zoom.size = 1
)
p3a
![](https://i.imgur.com/BXxM8c3.png)
Или обтекание второй
p3b <- ggplot(mtcars) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_zoom(
ylim = c(zoomlims$lower, zoomlims$upper),
zoom.size = 1
) +
facet_wrap(
facets = ~cyl,
nrow = 2,
scales = "free_y"
)
p3b
![](https://i.imgur.com/2RAXB8Z.png)
Возможно, можно скопировать c с помощью пэчворка, , но это не сработает либо , и не будет включать текст полосы из упаковки (хотя можно комментировать).
library(patchwork)
p2b <- ggplot(mtcars %>% filter(cyl == 6)) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_zoom(
ylim = c(zoomlims$lower[1], zoomlims$upper[1]),
zoom.size = 1
)
p2c <- ggplot(mtcars %>% filter(cyl == 8)) +
geom_boxplot(
aes(
x = factor(gear),
y = mpg,
fill = factor(gear)
)
) +
facet_zoom(
ylim = c(zoomlims$lower[1], zoomlims$upper[1]),
zoom.size = 1
)
p4 <- p2a + p2b + p2c + plot_layout(nrow = 2, guides = "collect")
p4
![](https://i.imgur.com/1HrbIAD.png)
Мысли?
Создано в 2020-02-14 re прекс пакет (v0.3.0)