我正在使用R在其中一个中绘制具有交互功能的multifgure图像。我正在使用split.screen
来执行此操作(因为我尝试使用par()
和基础R图形来执行此操作。
我的目标是保持每个screen(1)
j
情节的显示,而screen(2)
情节图以交互方式k
次更新。
但即使我设置erase = FALSE
或TRUE
,每次迭代子循环时,第一个图清除并显示空白图像。关于如何保存第一个绘图图像的任何想法,每次子循环,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}}能够做到。
答案 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)
,但应防止第一个图变空而第二个图重复。