交互式

时间:2016-02-16 15:01:18

标签: r plot par

有时我们会制作改变图形参数的绘图函数par。例如,如果我想结合基础和网格,我需要做一些改变par的魔法。现在我想允许用户使用这样的功能进行绘图,并且在下次调用同一函数时没有副作用。例如,如果按下两次以下功能,则每次都会产生以下两个图像:

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

plotter <- function(){

    #invisible(try(dev.off()))

    layout(matrix(c(1, 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))

}

plotter()
plotter()

enter image description here enter image description here

注意第二轮的笑脸ggplot。现在我可以通过取消注释行invisible(try(dev.off()))来解决这个问题。但是......当我想要绘制到外部设备时,下面的pdf调用将被关闭。如何安全地重新启动交互式设备,或者我可能会问错误的问题,或者其他一些答案。

pdf("test.pdf")
plotter()
dev.off()

我尝试在函数调用的开头添加.pardefault <- par(no.readonly = T),并在最后通过https://stackoverflow.com/a/9292673/1000343添加par(.pardefault),但这不起作用。这个答案https://stackoverflow.com/a/5790430/1000343也不起作用。

也许有一种方法可以对内部绘图设备列表使用dev.cur来识别绘图设备是RStudio还是Windows等,并且只在这些情况下重启。

0 个答案:

没有答案