说我有这些数据:
set.seed(100)
mydf<-
data.frame(
day = rep(1:5, each=20),
id = rep(LETTERS[1:4],25),
x = runif(100),
y = sample(1:2,100,T)
)
如果我只想使用id=="A"
绘制facet_wrap()
的所有五天,我们会这样:
ggplot(mydf[mydf$id=="A",], aes(x,y)) +
geom_tile() +
facet_wrap(~day,ncol=1)
但是,如果我想在2x2网格中自动绘制其中的四个(即显示A,B,C,D),那么使用嵌套小平面是否可能?我尝试在函数中执行多个变量,如下所示:
ggplot(mydf, aes(x,y)) +
geom_tile() +
facet_wrap(~ day+id)
但是这样做了:
我正在寻找一种嵌套的方法。每个面板中每天五个刻面行,每个绘图按列/行按id。显然,对于少量的情节,我可以单独保存并安排grid.arrange
等,但在实际数据中我有很多情节,所以如果可能的话想要自动化。
编辑:
回应评论 - 这是一种理想的输出:
答案 0 :(得分:2)
以下是使用multiplot
找到的ids = levels(as.factor(mydf$id))
p = vector("list", length(ids))
names(p) = ids
for(i in 1:length(ids)){
p[[i]] = ggplot(mydf[mydf$id == ids[i],], aes(x,y)) + geom_tile() + ggtitle(paste(ids[i])) + facet_wrap(~day, ncol=1)
}
multiplot(p$A, p$B, p$C, p$D, cols = 2)
函数的快速尝试
t
答案 1 :(得分:2)