很遗憾,我无法看出这是可能的。
首先,这不会与
gridExtra
一起工作,因为
arrangeGrob
操作
TableGrob
对象:
> ggplotGrob(qplot(1:100))
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.
TableGrob (6 x 5) "layout": 8 grobs
z cells name grob
1 0 (1-6,1-5) background rect[plot.background.rect.3349]
2 3 (3-3,3-3) axis-l absoluteGrob[GRID.absoluteGrob.3341]
3 1 (4-4,3-3) spacer zeroGrob[NULL]
4 2 (3-3,4-4) panel gTree[GRID.gTree.3329]
5 4 (4-4,4-4) axis-b absoluteGrob[GRID.absoluteGrob.3335]
6 5 (5-5,4-4) xlab text[axis.title.x.text.3343]
7 6 (3-3,2-2) ylab text[axis.title.y.text.3345]
8 7 (2-2,4-4) title text[plot.title.text.3347]
< p >
ggpairs
对象的内部表示仅包含要调用的方法,而不是实际的 grobs:
> str(p1$plots)
List of 9
$ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var1))"
$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var2, y = var1))"
$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var3, y = var1))"
$ : chr "ggally_points(ggally_data, ggplot2::aes(x = var1, y = var2))"
$ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var2))"
$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = var3, y = var2))"
$ : chr "ggally_points(ggally_data, ggplot2::aes(x = var1, y = var3))"
$ : chr "ggally_points(ggally_data, ggplot2::aes(x = var2, y = var3))"
$ : chr "ggally_diagAxis(ggally_data, ggplot2::aes(x = var3))"
整个构建实际 grobs 的工作由
GGally:::print.ggpairs
完成。查看源代码,你会看到
grid.newpage()
以及多个
popViewport
和
pushViewport
。这意味着即使是低级的
grid
方法(例如在
这里 描述的方法)也不适用,因为你的
grid
构造将被
GGally:::print.ggpairs
覆盖。
当然总有办法。修改源代码始终是一种选择,虽然我认为这对你的任务来说是一条漫长而困难的道路。如果有人能想出一个简单的解决方法,我很乐意被证明是错误的。
p1
和p2
属于ggpairs
类,这显然不是arrangeGrob
的有效类。 - David Arenburgp1 <- ggplot(df, aes(var1, var2)) + geom_point(); p2 <- ggplot(df, aes(var2, var3)) + geom_point(); p3 <- ggplot(df, aes(var1, var3)) + geom_point(); p <- arrangeGrob(p1, p2, p3, ncol=3)
- David Arenburg