R 地块(p)和地块(ggplot#gtable(ggplot#U build(p)))don';当绘图背景是透明的时,似乎不会给出相同的输出

R 地块(p)和地块(ggplot#gtable(ggplot#U build(p)))don';当绘图背景是透明的时,似乎不会给出相同的输出,r,ggplot2,R,Ggplot2,我有以下GGR绘图代码: require(ggplot2) 需要(主题) df您可以更直接地复制ggplot2::print.ggplot的功能。这似乎奏效了 pdf('test.pdf', width=5, height=2) plot(p) grid::grid.newpage() grid::grid.draw(ggplot_gtable(ggplot_build(p))) dev.off() 谢谢@MrFlick。你的建议行得通。唯一的问题是,我现在得到消息“空设备1”。注释d

我有以下GGR绘图代码:

require(ggplot2)
需要(主题)

df您可以更直接地复制
ggplot2::print.ggplot
的功能。这似乎奏效了

pdf('test.pdf', width=5, height=2)

plot(p)

grid::grid.newpage()
grid::grid.draw(ggplot_gtable(ggplot_build(p)))

dev.off()

谢谢@MrFlick。你的建议行得通。唯一的问题是,我现在得到消息“空设备1”。注释dev.off()消除了消息,但仍然解决了问题。我们真的需要它吗?不管怎样,非常感谢您的快速回复。该消息是正常的和预期的。无论何时执行
pdf()
,都应该在某个时候使用
dev.off()
关闭文档。我需要其他帮助。在我的实际绘图中,我有一个使用viewport创建的插图。请您建议如何将视口应用为网格。draw不接受视口参数?我可以解决视口问题。这似乎很简单
grid.newpage()grid.draw(ggplot_gtable(ggplot_build(p)))pushViewport(viewport(height=0.5,width=0.5,x=0.75,y=0.75))grid.draw(ggplot_gtable(ggplot_build(p))
我学到的最重要的一点是,如果你使用grid.draw,你必须进行转换
ggplotgtable(ggplot_build(p))
而不是直接将
p
传递到
grid.draw()
中,即使您不需要更改ggplot输出
p
中的任何内容。