首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网格:网格图形闪烁

网格:网格图形闪烁
EN

Stack Overflow用户
提问于 2013-07-24 04:00:09
回答 1查看 363关注 0票数 5

作为交互性的一部分,我正在使用R.中的grid包设计一个交互式的绘图,我反复删除并重新创建该图的各个部分。但是,网格元素的总数(如使用grid.ls()命令获得的)保持不变;我创建的所有内容都已被删除。

问题如下--一旦我经历了几个创建和删除的循环,我对图形所做的每一个删除,无论多么小,都会使情节中的所有交互部分(那些我反复删除和创建的部分)闪烁。

下面是我能想到的最简单的示例--首先运行以下代码来设置grid图形,然后重复删除和重新创建某些元素

代码语言:javascript
复制
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()
        }
    }

}

一旦全部设置完毕,就在设备上创建一个新的任意方格。

代码语言:javascript
复制
grid.rect(height=0.5, width=0.5, gp=gpar(lty = 2), name = "lastShape")

现在试着删除它

代码语言:javascript
复制
grid.gremove("lastShape")

注意,在运行最后一个删除命令时,我创建和删除的所有小圆圈都会稍微闪烁,即使我没有碰过它们。这使整个图形非常令人分心。

有什么办法可以防止吗?

多谢百万!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-25 18:23:19

@hadley -你这个大老板!您的第一个评论提供了正确的答案;我正在复制它并在这里扩展它以供将来参考.

你要做的就是用

代码语言:javascript
复制
dev.hold()

# .... do scary modifications ...

dev.flush()

似乎是个好主意。如果它再坏了,我会重新发邮件的。

注:这是只有在R v3开始.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17824994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档