假设我有这些数据:
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)
)
如果我只想使用 facet_wrap()
绘制 id=="A"
的所有五天,我们会这样做:
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
等进行排列,但在实际数据中,我有很多绘图,因此希望尽可能自动化。
编辑:
作为对评论的回应——这是一种期望的输出:
最佳答案
试试这个,
p <- ggplot(mydf, aes(x,y)) +
geom_tile() +
facet_wrap(~ day, ncol=1)
library(plyr)
lp <- dlply(mydf, "id", function(d) p %+% d + ggtitle(unique(d$id)))
library(gridExtra)
grid.arrange(grobs=lp, ncol=2)
关于r - ggplot2 中的嵌套 facet_wrap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202167/