使用split.screen以交互方式绘制多个数字并保持一个常量

时间:2014-09-27 00:52:53

标签: r graphics interactive

我正在使用R在其中一个中绘制具有交互功能的multifgure图像。我正在使用split.screen来执行此操作(因为我尝试使用par()和基础R图形来执行此操作。

我的目标是保持每个screen(1) j情节的显示,而screen(2)情节图以交互方式k次更新。 但即使我设置erase = FALSETRUE,每次迭代子循环时,第一个图清除并显示空白图像。关于如何保存第一个绘图图像的任何想法,每次子循环,k更新其图形?

split.screen(figs=c(1,2),erase=TRUE)
for(j in 1:5){
    screen(1)
    plot(rnorm(3))
    screen(2)
for(k in 1:5){

    plot(rnorm(3))
    par(ask=TRUE)
             }
}

  • 从帮助中更新。

这些功能与在设备上排列图表的其他机制完全不兼容:par(mfrow), par(mfcol)''layout()

我想这解释了par(ask=TRUE)。如果有人可以使用par()和基本图形功能执行此操作,我仍然感兴趣。

我无法找到任何par()变量,这些变量会明确指定在任何步骤中绘制的两个屏幕之一,同时允许par(ask=T)在子循环中更新,这就是{ {1}}能够做到。

2 个答案:

答案 0 :(得分:1)

尝试Hmisc::subplot

## draw first plot
par(mfcol=c(1,2), xpd=NA)
plot(rnorm(3))
plot(1,1) # dummy plot

## update subplot k times
for(k in 1:5) { 
  rect(grconvertX(par("fin")[1], from="inches"),
       grconvertY(0, from="inches"),
       grconvertX(par("fin")[1]*2, from="inches"),
       grconvertY(par("fin")[2], from="inches"), col="white", border=NA)  ## cover-up
  subplot( plot(rnorm(3)), 1, 1, size=par("pin") )  
  readline("Hit <Return> to see next plot: ")
}

答案 1 :(得分:0)

添加flush.console()Sys.sleep()应该可以。

split.screen(figs=c(1,2),erase=TRUE)
for(j in 1:5){
  screen(1)
  plot(rnorm(3))
  flush.console()
  Sys.sleep(0.5)
  for(k in 1:5){
    screen(2)
    plot(rnorm(3))
    par(ask=TRUE)
    flush.console()
    Sys.sleep(0.5)
  }
}

根据警告,这仍将禁止par(ask=TRUE),但应防止第一个图变空而第二个图重复。