使用ggplot_build更改ggplot2图并在plot_grid中使用

时间:2018-12-17 12:23:18

标签: r ggplot2 cowplot

我想使用ggplot2ggplot_build函数更改R中的ggplot_gtable图,然后在plot_grid中使用它。

进行绘图的示例代码:

library(ggplot2) 
library(cowplot)

p1 <- ggplot(iris) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point()
p2 <- ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point()

plot_grid(p1, p2)

然后我使用ggplot_build和ggplot_gtable更改p1:

q1 <- ggplot_build(p1)
q1$data[[1]]$colour <- "black"
q1 <- ggplot_gtable(q1)

plot(q1)绘制了我想要的图形,但是无法在plot_gridplot_grid(q1, p2)中使用它。我该怎么解决?

编辑:代码确实应该有效。完全R重新启动后,一切按预期进行。抱歉,应该先尝试一下!

2 个答案:

答案 0 :(得分:1)

调用ggplot2进行打印/绘图时,实际上在后台发生的是:

data <- ggplot_build(x)
gtable <- ggplot_gtable(data)

其中x是ggplot2对象(p1p2)。 (请参见ggplot2:::plot.ggplot。) 其他例程使用ggplotGrob(x)的同义词,ggplot_gtable(ggplot_build(x))

短篇小说:gtable 不是 ggplot2对象。这是一个杂技对象。并没有为grob对象定义绘图或打印方法。相反,必须使用grid包来绘制它们。

要绘制q1q2,请使用:

library(grid)
grid.newpage()
grid.draw(q1)

答案 1 :(得分:0)

您介意通过reprex程序包运行代码,然后在此处发布结果吗?某些功能无法正常发挥作用。您发布的代码应该可以按预期工作(见下文)。

请注意,我正在运行Cowplot的开发版本,但是唯一可见的区别将是主题。在plot_grid()中使用gtables已经工作了多年。

library(ggplot2) 
library(cowplot)
#> 
#> 
#> *******************************************************
#> Note: cowplot does not change the default ggplot2 theme
#> anymore. To recover the previous behavior, execute:
#>   theme_set(theme_cowplot())
#> *******************************************************

p1 <- ggplot(iris) +
  aes(x = Sepal.Length, y = Sepal.Width, colour = Species) +
  geom_point()
p2 <- ggplot(iris) +
  aes(x = Petal.Length, y = Petal.Width, colour = Species) +
  geom_point()

plot_grid(p1, p2)

q1 <- ggplot_build(p1)
q1$data[[1]]$colour <- "black"
q1 <- ggplot_gtable(q1)
plot_grid(q1, p2)

reprex package(v0.2.1)于2018-12-17创建