使用带已编辑GGPLOTGROB的cbind时出现意外行为

使用带已编辑GGPLOTGROB的cbind时出现意外行为,r,ggplot2,gridextra,R,Ggplot2,Gridextra,我一直在尝试使用grid和gridExtra软件包提供的函数编辑ggplot2创建的一些绘图。我意识到单是ggplot2就可以制作出一些非常好的多方面情节。然而,在某些情况下,我喜欢创建单独的绘图,然后在以后组合在一起。在尝试这样做时,我在使用已编辑的ggplot2图形时,使用cbind()和grid.draw()或grid.arrange()遇到了一些意外行为。以下是MWE的代码: #Load libraries library(ggplot2); library(gridExtra)

我一直在尝试使用grid和gridExtra软件包提供的函数编辑ggplot2创建的一些绘图。我意识到单是ggplot2就可以制作出一些非常好的多方面情节。然而,在某些情况下,我喜欢创建单独的绘图,然后在以后组合在一起。在尝试这样做时,我在使用已编辑的ggplot2图形时,使用
cbind()
grid.draw()
grid.arrange()
遇到了一些意外行为。以下是MWE的代码:

#Load libraries
    library(ggplot2); library(gridExtra)

#Load data
    data(mtcars)

#Ggplot
    p = qplot(wt,mpg,data=mtcars,color=cyl)
    grob = ggplotGrob(p)

#Bold xlabel
    grobEdited = editGrob(grid.force(grob),gPath("xlab","GRID.text"),grep=TRUE,gp=gpar(fontface="bold"))

#Visualize
    grid.newpage()
    grid.draw(grobEdited)

它像预期的那样工作。现在,为了说明这个问题,让我们来看两个同样编辑过的ggplot2图形:

#Cbind example with edited graphs
    grid.newpage()
    grid.draw(cbind(grobEdited,grobEdited))

它没有按预期工作!现在在未编辑的图形上测试
cbind()

#Cbind example with grob
    grid.newpage()
    grid.draw(cbind(grob,grob)) 


一切正常。我不熟悉网格化的数字,所以我有什么做错了吗?

我在@user20650的评论后发布了一个答案。最简单的解决方法是使用
grid
gridExtra
提供的编辑功能编辑ggplot2图形之前,先使用
cbind()

#Edit after cbind()                              
    grobEdited = editGrob(grid.force(cbind(grob,grob)),gPath("xlab","GRID.text"),global=TRUE,grep=TRUE,gp=gpar(fontface="bold"))

#Visualize
    grid.newpage()
    grid.draw(grobEdited)

问题在于
grid.force()
调用。文档表明,在不同的绘图环境中绘制结果可能没有意义。您能够删除这部分代码吗?@ryan morton
grid.force()
允许编辑功能访问ggplot2图形中的所有GROB,因此在这种情况下,我认为这是必要的。我想我可以使用编辑功能手动编辑grob w/o(这将使思考变得更加困难)。可能在编辑之前尝试
cbind
ing
grobEdited=editGrob(grid.force(cbind(grob,grob)),gPath(“xlab”,“grid.text”),global=TRUE,grep=TRUE,gp=gpar(fontface=“bold”,col=“red”)
(或者
grid.arrange
可以满足您的需要)