在gridExtra中添加带下标的主标题时出现错误

6

我正在尝试使用gridExtra包来排列由ggplot2生成的几个图。

library(ggplot2)
library(gridExtra)
p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point()
p2 <- ggplot(iris, aes(Sepal.Length, Petal.Length)) + geom_point()
p3 <- ggplot(iris, aes(Species, Sepal.Width)) + geom_point()
p4 <- ggplot(iris, aes(Sepal.Width, Petal.Width)) + geom_point()
grid.arrange(main="CO2Exp", p1, p2, p3, p4, ncol=2)

尝试添加主标题时,以下内容可正常工作。
grid.arrange(main="CO2Exp", p1, p2, p3, p4, ncol=2)

但是当我使用expression来获取下标时,
grid.arrange(main=expression(paste(CO[2], "Exp")), p1, p2, p3, p4, ncol=2)

我收到了以下错误信息。
Error in valid.data(rep(units, length.out = length(x)), data) : 
  no 'grob' supplied for 'grobwidth/height' unit

如何修复这个问题?

我使用的是R_3.1.3、gridExtra_0.9.1和ggplot2_1.0.1


1
grid.arrange 对 is.character 进行了一个粗略的测试,这些字符被传递给 textGrob,但表达式无法通过测试。解决方法是直接传递 textGrob,如下所示。 - baptiste
1个回答

8
创建一个明确的textGrob对象:
grid.arrange(main = textGrob(label = expression(paste(CO[2], "Exp"))), 
             p1, p2, p3, p4, ncol=2)

编辑(2015年7月16日):从gridExtra >= 2.0.0开始,main参数已更名为top。有关详细信息,请参见?arrangeGrob


1
啊啊啊,你比我快了几秒钟。 :) - Roman Luštrik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接