使用ggplotGrob时如何避免grob名称中的随机后缀?

时间:2018-11-27 23:51:31

标签: r ggplot2 r-grid

我刚刚注意到,每当在ggplot对象上调用ggplotGrob时,我都会得到不同的grob名称-具体来说,就是不同的后缀。当我按全名选择并编辑一个grob时,这可能是重现代码的问题,因为该名称可以随着新的运行而更改。

例如,panel.background..rect.6在第二次运行时变成panel.background..rect.76

library(ggplot2)
library(grid)

p <- ggplot(data = iris, 
            aes(x = Sepal.Length, 
                y = Sepal.Width,
                colour = Species)) +
  geom_point()

# First run
g <- grid.force(ggplotGrob(p))
grid.ls(g)
#> layout
#>   background.1-11-12-1
#>   panel.7-5-7-5
#>     grill.gTree.15
#>       panel.background..rect.6

# Second run
g <- grid.force(ggplotGrob(p))
grid.ls(g)
#> layout
#>   background.1-11-12-1
#>   panel.7-5-7-5
#>     grill.gTree.85
#>       panel.background..rect.76

我认为set.seed()将解决问题,但类似这样:

set.seed(123)
g <- grid.force(ggplotGrob(p))
grid.ls(g)

在每次运行时还提供不同的后缀。

我知道ggplotGrob(x)实际上是ggplot_gtable(ggplot_build(x)),但是我无法在ggplot_gtableggplot_build中找到/理解任何参数来停止随机后缀。

我可以使用正则表达式来选择grob的名称,避免使用后缀陷阱,但我想知道是否可以以某种方式取消随机后缀的命名。

0 个答案:

没有答案