R 绘图网格/ggplot2+;带pdf的base给出空白的第一页(控制绘图宽度)

R 绘图网格/ggplot2+;带pdf的base给出空白的第一页(控制绘图宽度),r,ggplot2,base,r-grid,R,Ggplot2,Base,R Grid,我想在pdf输出中的同一绘图中绘制网格和基础绘图。我看到了如何在几个地方添加grid plus base,包括:和 我还想使用比例或相对宽度来控制绘图的宽度。我以为我有下面的代码,我试图输出到一个pdf,然后它打印前的绘图空白页。如何使它不打印空白页?我不喜欢任何一个软件包,我只是希望答案可以概括(简单是一个加号;我觉得我下面的代码可以简化) 该图如下所示: 使用gridGraphics软件包,您可能会有更好的运气,尽管事情也并非完全顺利 库(网格图形) grab_grob这里有一种方法,它删

我想在
pdf
输出中的同一绘图中绘制网格和基础绘图。我看到了如何在几个地方添加grid plus base,包括:和

我还想使用比例或相对宽度来控制绘图的宽度。我以为我有下面的代码,我试图输出到一个pdf,然后它打印前的绘图空白页。如何使它不打印空白页?我不喜欢任何一个软件包,我只是希望答案可以概括(简单是一个加号;我觉得我下面的代码可以简化)

该图如下所示:


使用gridGraphics软件包,您可能会有更好的运气,尽管事情也并非完全顺利

库(网格图形)

grab_grob这里有一种方法,它删除了@baptiste指出的问题所在的
gridBase::gridFIG
。我把宽度弄成了黑色

library(ggplot2); library(grid); library(gridBase)

pdf("test.pdf")

widths <- c(.335, .665)
widths <- 100*round(widths/sum(widths), 2)

layout(matrix(c(rep(1, widths[1]), rep(2, widths[2])), nrow = 1,  byrow = TRUE))

#Draw base plot
plot.new()
graphics::par(mar=c(1, 1, 1, 1), new = TRUE)

plot(1:10)

#Draw ggplot
plot.new()
vps <- baseViewports()
print( ggplot(mtcars, aes(mpg, hp)) + geom_point(), vp = vpStack(vps$figure,vps$plot))

dev.off()
库(ggplot2);图书馆(网格);图书馆(gridBase)
pdf(“test.pdf”)

宽度罪魁祸首似乎在
gridBase::gridFIG()
中,它依次调用
gridBase:::currentViewportLoc()
,其中包含
width>等调用
library(gridGraphics)

grab_grob <- function(){
  grid.echo(newpage=TRUE)
  grid.grab()
}

par(mar=c(4,6,1,1)) # for some reason need lots of space
plot(1:10)
bg <- grab_grob()
p <- ggplot(mtcars, aes(mpg, hp)) + geom_point()

ggsave("test.pdf", gridExtra::arrangeGrob(bg, p, widths = c(2,1)))
library(ggplot2); library(grid); library(gridBase)

pdf("test.pdf")

widths <- c(.335, .665)
widths <- 100*round(widths/sum(widths), 2)

layout(matrix(c(rep(1, widths[1]), rep(2, widths[2])), nrow = 1,  byrow = TRUE))

#Draw base plot
plot.new()
graphics::par(mar=c(1, 1, 1, 1), new = TRUE)

plot(1:10)

#Draw ggplot
plot.new()
vps <- baseViewports()
print( ggplot(mtcars, aes(mpg, hp)) + geom_point(), vp = vpStack(vps$figure,vps$plot))

dev.off()