Learn R Programming

animation (version 2.0-5)

ani.record: Record and replay animations

Description

These two functions use recordPlot and replayPlot to record image frames and replay the animation respectively.

Usage

ani.record(reset = FALSE, replay.cur = FALSE)
ani.replay(list)

Arguments

reset
if TRUE, the recording list will be cleared, otherwise new plots will be appended to the existing list of recorded plots
replay.cur
whether to replay the current plot (we can set both reset and replay.cur to TRUE so that low-level plotting changes can be captured by off-screen graphics devices without storing all the plots in memory; see Note)
list
a list of recorded plots; if missing, the recorded plots by ani.record will be used

Value

  • ani.record: Invisible NULL.

Details

ani.record: one difficulty in capturing images in R (base graphics) is that the off-screen graphics devices cannot capture low-level plotting commands as new image files -- only high-level plotting commands can produce new image files; ani.record uses recordPlot to record the plots when any changes are made on the current plot.

ani.replay: it can replay the recorded plots as an animation. Moreover, we can convert the recorded plots to other formats too, e.g. use saveHTML and friends.

The recorded plots are stored as a list in .ani.env$.images, which is the default value to be passed to ani.replay; .ani.env is an invisible environment created when this package is loaded, and it will be used to store some commonly used objects such as animation options (ani.options).

See Also

recordPlot and replayPlot; ani.pause

Examples

Run this code
library(animation)

n = 20
x = sort(rnorm(n))
y = rnorm(n)
## set up an empty frame, then add points one by one
par(bg = "white")  # ensure the background color is white
plot(x, y, type = "n")

ani.record(reset = TRUE)  # clear history before recording

for (i in 1:n) {
    points(x[i], y[i], pch = 19, cex = 2)
    ani.record()  # record the current frame
}

## now we can replay it, with an appropriate pause between
#   frames
oopts = ani.options(interval = 0.5)
ani.replay()

## or export the animation to an HTML page
saveHTML(ani.replay(), img.name = "record_plot")


## record plots and replay immediately
if (interactive()) {
    saveHTML({
        dev.new()  # open a screen device (x11(), quartz())
        par(bg = "white")  # ensure the background color is white
        plot(x, y, type = "n")
        for (i in 1:n) {
            points(x[i], y[i], pch = 19, cex = 2)
            ani.record(reset = TRUE, replay.cur = TRUE)  # record the current frame
        }
        dev.off()  # close the assisting device we opened
    })
}

ani.options(oopts)

Run the code above in your browser using DataLab