我想用嵌套图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
但是每个方面都应该是这样的(这是上面的第一个方面):
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
理想情况下,一个方面调用会将所有参数都用于缩放和换行,但它们不会,并且在另一个方面调用一个方面功能只会覆盖前一个方面,例如第二个缩放
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
或者换第二个
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
可以通过拼凑来模仿这一点,但这也不起作用,并且不会包含包装中的条形文本(尽管可以注释)。
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
想法?
由reprex 包(v0.3.0)于 2020 年 2 月 14 日创建