在R中更改多面板图中的绘图面板

5

我希望能够在R中跟踪具有多个图形的运行模拟。简单的方法是创建一个多面板图(在我的情况下,我只使用par(mfrow = c(2,2))),然后依次绘制四个图形。问题是每次必须完全重新绘制图形,并且每次函数达到最后(第4个)面板时,整个窗口都会被重新绘制。我希望能够返回到例如第一个面板,然后在先前的基础上绘制下一个点。如果这是单独的窗口,我可以使用dev.set()在它们之间进行更改,但是是否有类似于面板的东西?


?split.screen有一些示例。 - baptiste
似乎我可以使用split.screen()screen()命令来完成这个任务:https://dev59.com/LXA75IYBdhLWcg3ws7Yh?rq=1 - Michael K. Borregaard
1个回答

6

如果你一开始就设置好了正确的最终尺寸,你可以使用par(mfg=在不同的面板之间进行切换并添加内容。

例如:

pars <- c('plt','usr')

par(mfrow=c(2,2))

plot(anscombe$x1, anscombe$y1, type='n')
par1 <- c(list(mfg=c(1,1,2,2)), par(pars))
plot(anscombe$x2, anscombe$y2, type='n')
par2 <- c(list(mfg=c(1,2,2,2)), par(pars))
plot(anscombe$x3, anscombe$y3, type='n')
par3 <- c(list(mfg=c(2,1,2,2)), par(pars))
plot(anscombe$x4, anscombe$y4, type='n')
par4 <- c(list(mfg=c(2,2,2,2)), par(pars))

for( i in 1:11 ) {
    par(par1)
    points(anscombe$x1[i], anscombe$y1[i])
    Sys.sleep(0.5)
    par(par2)
    points(anscombe$x2[i], anscombe$y2[i])
    Sys.sleep(0.5)
    par(par3)
    points(anscombe$x3[i], anscombe$y3[i])
    Sys.sleep(0.5)
    par(par4)
    points(anscombe$x4[i], anscombe$y4[i])
    Sys.sleep(0.5)
}

谢谢!这比参考问题中建议使用split.screen()要有用得多,但是如果我循环回来并在其上绘制,则split.screen()会出现奇怪且无法识别的行为(请参阅帮助文件)。我卡在了使用mfg时坐标系统混乱的问题上,但是这个答案通过保存每个图的par来完美地解决了这个问题。 - Michael K. Borregaard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接