使用带已编辑GGPLOTGROB的cbind时出现意外行为
我一直在尝试使用grid和gridExtra软件包提供的函数编辑ggplot2创建的一些绘图。我意识到单是ggplot2就可以制作出一些非常好的多方面情节。然而,在某些情况下,我喜欢创建单独的绘图,然后在以后组合在一起。在尝试这样做时,我在使用已编辑的ggplot2图形时,使用使用带已编辑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)
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 mortongrid.force()
允许编辑功能访问ggplot2图形中的所有GROB,因此在这种情况下,我认为这是必要的。我想我可以使用编辑功能手动编辑grob w/o(这将使思考变得更加困难)。可能在编辑之前尝试cbind
inggrobEdited=editGrob(grid.force(cbind(grob,grob)),gPath(“xlab”,“grid.text”),global=TRUE,grep=TRUE,gp=gpar(fontface=“bold”,col=“red”)
(或者grid.arrange
可以满足您的需要)