【发布时间】:2016-02-16 03:14:06
【问题描述】:
我想在pdf 输出的同一图中绘制一个网格和基本图。我看到了如何在几个地方添加网格加基地,包括这里:Combining grid.table and base package plots in R figure 和 R put together traditional plot and ggplot2
我还想使用比例或相对宽度来控制绘图的宽度。我以为我有下面的代码,我试图输出到 pdf,然后它在情节之前打印一个空白页。我怎样才能让它不绘制空白页?我没有嫁给任何包,我只是希望答案可以概括(简单是加分;我觉得下面的代码可以简化)。
library(ggplot2); library(grid); library(gridBase)
pdf("test.pdf")
grid::grid.newpage()
grid::pushViewport(grid::viewport(layout = grid::grid.layout(1, ncol=2,
widths = grid::unit(c(.6, .4), "npc"))))
#Draw base plot
grid::pushViewport(grid::viewport(layout.pos.col = 1, width = grid::unit(.8, "npc")))
graphics::plot.new()
graphics::par(fig = gridBase::gridFIG(), mar=c(1, 1, 1, 1), new = TRUE)
plot(1:10)
grid::popViewport()
#Draw ggplot
grid::pushViewport(grid::viewport(layout.pos.col = 2, width = grid::unit(.2, "npc")))
print( ggplot(mtcars, aes(mpg, hp)) + geom_point(), newpage = FALSE)
grid::popViewport()
dev.off()
剧情如下:
【问题讨论】:
-
罪魁祸首似乎在
gridBase::gridFIG()中,它又调用gridBase:::currentViewportLoc(),其中包含诸如width <- convertWidth(unit(1, "npc"), "inches", valueOnly = TRUE)之类的调用,已知这些调用会触发不需要的新页面。也许您可以通过使用自定义版本的 gridFIG 来避免它,而不是进行这些转换,而是使用 par(din) 之类的东西。