作为交互性的一部分,我正在使用R.中的grid包设计一个交互式的绘图,我反复删除并重新创建该图的各个部分。但是,网格元素的总数(如使用grid.ls()命令获得的)保持不变;我创建的所有内容都已被删除。
问题如下--一旦我经历了几个创建和删除的循环,我对图形所做的每一个删除,无论多么小,都会使情节中的所有交互部分(那些我反复删除和创建的部分)闪烁。
下面是我能想到的最简单的示例--首先运行以下代码来设置grid图形,然后重复删除和重新创建某些元素
library(grid)
pushViewport(viewport())
for (x in seq(0, 1, length=5))
{
for (y in seq(0, 1, length=5))
{
pushViewport(viewport(x = x, y = y, width=1/5, height=1/5, name=paste("foo", x, y, sep="")))
grid.rect()
pushViewport(viewport(x = 0, 0, width=1/4, height=1/4, name="bar1"))
grid.circle(name="testing")
grid.text("123")
upViewport()
pushViewport(viewport(x = 1, 0, width=1/4, height=1/4, name="bar2"))
grid.circle(name="testing")
grid.text("123")
upViewport()
pushViewport(viewport(x = 0, 1, width=1/4, height=1/4, name="bar3"))
grid.circle(name="testing")
grid.text("123")
upViewport()
pushViewport(viewport(x = 1, 1, width=1/4, height=1/4, name="bar4"))
grid.circle(name="testing")
grid.text("123")
upViewport()
upViewport()
}
}
for (i in 1:10)
{
grid.gremove("testing")
for (x in seq(0, 1, length=5))
{
for (y in seq(0, 1, length=5))
{
downViewport(paste("foo", x, y, sep=""))
downViewport("bar1"); grid.circle(name="testing"); upViewport()
downViewport("bar2"); grid.circle(name="testing"); upViewport()
downViewport("bar3"); grid.circle(name="testing"); upViewport()
downViewport("bar4"); grid.circle(name="testing"); upViewport()
upViewport()
}
}
}一旦全部设置完毕,就在设备上创建一个新的任意方格。
grid.rect(height=0.5, width=0.5, gp=gpar(lty = 2), name = "lastShape")现在试着删除它
grid.gremove("lastShape")注意,在运行最后一个删除命令时,我创建和删除的所有小圆圈都会稍微闪烁,即使我没有碰过它们。这使整个图形非常令人分心。
有什么办法可以防止吗?
多谢百万!
发布于 2013-07-25 18:23:19
@hadley -你这个大老板!您的第一个评论提供了正确的答案;我正在复制它并在这里扩展它以供将来参考.
你要做的就是用
dev.hold()
# .... do scary modifications ...
dev.flush()似乎是个好主意。如果它再坏了,我会重新发邮件的。
注:这是只有在R v3开始.
https://stackoverflow.com/questions/17824994
复制相似问题