[R] animated grid graphics

Unternährer Thomas unthomas at student.ethz.ch
Tue Jul 21 15:29:09 CEST 2009


Ups, I just realized that we have the possibility of using
grid.remove(..., redraw = FALSE) which is more or less what I was looking for.

But I'm still wondering if its possible to remove a viewport from
a viewport tree:

##==============================================================================
f <- function(vpName) {
  pushViewport(viewport(width = 0.8, height = 0.8, name = vpName))
  grid.rect()
}

grid.newpage()
f("vp1")
f("vp2")
f("vp3")

current.vpTree()
## viewport[ROOT]->(viewport[vp1]->(viewport[vp2]->(viewport[vp3])))

## remove("vp2") should result in
## viewport[ROOT]->(viewport[vp1]->(viewport[vp3]))
## or
## viewport[ROOT]->(viewport[vp1])
## grid.rect should also be removed from the device
##==============================================================================

is this possible?





-----Ursprüngliche Nachricht-----
Von: r-help-bounces at r-project.org im Auftrag von Unternährer  Thomas
Gesendet: Di 21.07.2009 14:18
An: r-help at r-project.org
Betreff: [R] animated grid graphics
 


I need to make a fairly complex animated graphic and decided to use grid for it.
A very simple example of what I need:

##==============================================================================
library(grid)
grid.newpage()
pushViewport(plotViewport())
pushViewport(viewport(xscale = extendrange(c(0, 100)),
                      yscale = extendrange(c(0, 100))))
grid.xaxis()
grid.yaxis()

rectNames <- paste("r", 1:100, sep = "")
for (i in 1:100) {
  grid.rect(x = unit(sample(0:100, 1), "native"),
            y = unit(sample(0:100, 1), "native"),
            width = 0.1, height = 0.1, name = rectNames[i])
}

for (i in 1:100) {
  grid.remove(rectNames[i])
}
##==============================================================================

The problem here is that removing grid objects is very slow, at least in the 
way I use it. Is it possible to remove all objects at once (or to use some
technique similar to double buffering)?


A second way to do it would be to remove a viewport and all its children from
the current viewport tree. Is this possible? Example:

##==============================================================================
grid.newpage()
pushViewport(plotViewport())
pushViewport(viewport(xscale = extendrange(c(0, 100)), 
                      yscale = extendrange(c(0, 100))))
grid.xaxis()
grid.yaxis()

pushViewport(viewport(xscale = extendrange(c(0, 100)), 
             yscale = extendrange(c(0, 100)),
             name = "plotVP"))
for (i in 1:100) {
  grid.rect(x = unit(sample(0:100, 1), "native"), 
            y = unit(sample(0:100, 1), "native"),
            width = 0.1, height = 0.1, name = paste("r", i, sep = ""))
}

*remove("plotVP")*??
##==============================================================================


Another approach would be to save every single plot as an image and use 
something like imagemagick to produce an animated gif, but I was just wondering
if it's possible by using grid only (no need to use it outside of R).

Thanks in advance

Thomas

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.




More information about the R-help mailing list