我想使用ggplot2
和ggplot_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_grid
和plot_grid(q1, p2)
中使用它。我该怎么解决?
编辑:代码确实应该有效。完全R重新启动后,一切按预期进行。抱歉,应该先尝试一下!
答案 0 :(得分:1)
调用ggplot2进行打印/绘图时,实际上在后台发生的是:
data <- ggplot_build(x)
gtable <- ggplot_gtable(data)
其中x
是ggplot2对象(p1
和p2
)。 (请参见ggplot2:::plot.ggplot
。)
其他例程使用ggplotGrob(x)
的同义词,ggplot_gtable(ggplot_build(x))
。
短篇小说:gtable
不是 ggplot2对象。这是一个杂技对象。并没有为grob对象定义绘图或打印方法。相反,必须使用grid
包来绘制它们。
要绘制q1
和q2
,请使用:
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创建