[R] animation without intermediate files?
Martin Maechler
maechler at stat.math.ethz.ch
Wed Jan 26 12:32:17 CET 2005
>>>>> "MM" == Martin Maechler <maechler at stat.math.ethz.ch>
>>>>> on Tue, 25 Jan 2005 09:59:03 +0100 writes:
>>>>> "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"
MM> well, sorry Paul, but not for my definition of "smooth"!
MM> Instead,
MM> n <- 100
MM> plot(1,1, xlim=c(0,n), ylim=c(-4,4), type="n")
MM> x <- rnorm(n)
MM> for (i in 1:n) { points(i, x[i], pch=16, cex=2); Sys.sleep(0.02) }
MM> comes much closer to my version of "smooth" ;-)
I apologize to Paul, since what I said seems to be quite
platform dependent. Here's my current "knowledge" on the matter:
o Paul's " for(..) plot(..) "
- flickers quite a bit for me {on Linux X11 with no
particularly fast graphics card}.
- seems quite smooth for at least two Windows users who have
relatively fast graphics cards.
o My solution of
" for(..) { points(..) ; Sys.sleep(..) } "
doesn't redraw the coordinate system and so doesn't "flicker"
(afaik, independently of platform)
HOWEVER on windows; the graphics are somehow buffered and
points are not drawn one by one, but rather in batches --> "not smooth"
Martin
More information about the R-help
mailing list