[R] animation without intermediate files?

Martin Maechler maechler at stat.math.ethz.ch
Tue Jan 25 09:59:03 CET 2005


>>>>> "Paul" == Paul Murrell <p.murrell at auckland.ac.nz>
>>>>>     on Tue, 25 Jan 2005 13:40:15 +1300 writes:

    Paul> Hi
    Paul> Cari G Kaufman wrote:
    >> Hello, 
    >> 
    >> Does anyone know how to make "movies" in R by making a sequence of plots?  
    >> I'd like to animate a long trajectory for exploratory purposes only,
    >> without creating a bunch of image files and then using another program to
    >> string them together.  In Splus I would do this using double.buffer()  to
    >> eliminate the flickering caused by replotting. For instance, with a 2-D
    >> trajectory in vectors x and y I would use the following:
    >> 
    >> motif()
    >> double.buffer("back")
    >> for (i in 1:length(x)) {
    >>   plot(x[i], y[i], xlim=range(x), ylim=range(y))
    >>   double.buffer("copy")
    >> }
    >> double.buffer("front")
    >> 
    >> I haven't found an equivalent function to double.buffer in R.  I tried
    >> playing around with dev.set() and dev.copy() but so far with no success
    >> (still flickers).

    Paul> Double buffering is only currently an option on the Windows graphics 
    Paul> device (and there it is "on" by default).  So something like ...

    Paul> x <- rnorm(100)
    Paul> for (i in 1:100)
    Paul>    plot(1:i, x[1:i], xlim=c(0, 100), ylim=c(-4, 4), pch=16, cex=2)

    Paul> is already "smooth"

well, sorry Paul, but not for my definition of "smooth"!

Instead, 

  n <- 100
  plot(1,1, xlim=c(0,n), ylim=c(-4,4), type="n")
  x <- rnorm(n)
  for (i in 1:n) { points(i, x[i], pch=16, cex=2); Sys.sleep(0.02) }

comes much closer to my version of "smooth"  ;-)

Martin




More information about the R-help mailing list