Description Usage Arguments Details Value Note Author(s) References See Also Examples
These two functions use recordPlot
and replayPlot
to record image frames and replay the animation respectively.
Replay the animation
1 2 3 | ani.record(reset = FALSE, replay.cur = FALSE)
ani.replay(list)
|
reset |
if |
replay.cur |
whether to replay the current plot (we can set both
|
list |
a list of recorded plots; if missing, the recorded plots by
|
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. For a graphical
device to be recordable, you have to call dev.control('enable')
before
plotting.
ani.replay
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
).
Invisible NULL
.
Although we can record changes made by low-level plotting commands
using ani.record
, there is a price to pay – we need memory
to store the recorded plots, which are usually verg large when the plots
are complicated (e.g. we draw millions of points or polygons in a single
plot). However, we can set replay.cur
to force R to produce a new
copy of the current plot, which will be automatically recorded by
off-screen grapihcs devices as new image files. This method has a
limitation: we must open a screen device to assist R to record the plots.
See the last example below. We must be very careful that no other graphics
devices are opened before we use this function.
If we use base graphics, we should bear in mind that the background colors
of the plots might be transparent, which could lead to problems in HTML
animation pages when we use the png
device (see the examples
below).
Yihui Xie
Examples at https://yihui.org/animation/example/ani-record/
recordPlot
and replayPlot
;
ani.pause
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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
saveHTML({
dev.control("enable") # enable recording
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
}
})
ani.options(oopts)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.