[R] animated grid graphics

Paul Hiemstra p.hiemstra at geo.uu.nl
Tue Jul 21 15:00:33 CEST 2009


Hi,

Drawing grid graphics always takes long, I would write the images to 
png's and make the animation. If you use Linux I can suggest some nice 
tools to do this. This movie is also much more compatible with all kinds 
of machines. It might be that you can get your grid animation working on 
your own computer, but if another user has a less powerfull machine he 
might not have a smooth animation.

Good luck!
Paul

Unternährer Thomas schreef:
> 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