我有一些重复的测量数据,来自大小不一的队列。我想为单个受试者创建一个带有小平面的图,队列按行分组-本质上是一个不规则的小平面网格。
library(ggplot2)
set.seed(42)
n <- c(3, 4, 3)
k <- 5
y <- t(MASS::mvrnorm(sum(n), rep(0, k), diag(k) * 0.4 + 0.6))
d <- data.frame(
subjid = c(col(y)),
cohort = rep(rep(1:3, n), each = k),
tpt = c(row(y)),
y = c(y)
)
d$subjid <- sprintf("%d%02d", d$cohort, d$subjid)
head(d)
#> subjid cohort tpt y
#> 1 101 1 1 -1.3375592
#> 2 101 1 2 -1.0513184
#> 3 101 1 3 -0.3968382
#> 4 101 1 4 -1.5878445
#> 5 101 1 5 -1.2790463
#> 6 102 1 1 -0.3494143
我尝试了facet_wrap()
和facet_grid()
,但结果都不令人满意。对于wrap,我最终将来自不同队列的受试者混合在行中:
ggplot(d, aes(tpt, y)) + geom_line() + facet_wrap(~ subjid, ncol = max(n))
对于网格,我最终使用了太多的面:
ggplot(d, aes(tpt, y)) + geom_line() + facet_grid(cohort ~ subjid)
我还尝试了拼凑,这让我得到了正确的分组,但不是跨行的面对齐。
library(patchwork)
lapply(unique(d$cohort), \(c) {
d <- subset(d, cohort == c)
ggplot(d, aes(tpt, y)) + geom_line() + facet_grid(cohort ~ subjid)
}) |> wrap_plots(ncol = 1)
如何在ggplot 2中创建不规则的面网格?
1条答案
按热度按时间fjaof16o1#
来自ggh4x的
facet_manual()
可以创建这样的布局。但是,首先需要手动创建网格布局:可以使用
strip
参数添加队列条带(感谢@teunbrand):