Answers:
这一点取决于您的最终目标是什么。
快速而肮脏的hack,用于实时演示
一个可行的选择是Sys.sleep(seconds)
在其中seconds
指示帧之间的秒数的循环中使用。您需要在调用中设置xlim
和ylim
参数,plot
以使事情按预期进行。
这是一些简单的演示代码。
# Just a quick test of Sys.sleep() animation
x <- seq(0,2*pi, by=0.01)
y <- sin(x)
n <- 5
pause <- 0.5
ybnds <- quantile(n*y, probs=c(0,1))
x11()
# Draw successively taller sinewaves with a gradually changing color
for( i in 1:n )
{
plot(x, i*y, type="l", lwd=2, ylim=ybnds, col=topo.colors(2*n)[i])
Sys.sleep(pause)
}
这非常有效,尤其是使用X-Windows作为窗口系统时。quartz()
不幸的是,我发现Mac的表现不佳。
GIF动画
如果您需要重新分发,发布在网页上等内容,请查看caTools软件包中的write.gif
功能。显示帮助给出了几个很好的例子,包括几个动画-一个带有使用Mandelbrot集的很好的例子。write.gif
更精细的控制和更出色的动画
有一个看起来很不错的动画包。不过,我自己并没有使用过它,因此我无法以任何一种方式给出任何真正的建议。
我已经看到了此程序包输出的一些很好的示例,它们看起来非常不错。可能的“亮点”之一是将动画嵌入PDF的能力。
tourr:animate_dist
以获取此方法的示例。
一种方法是使用由Yihui Xie提供的出色动画包。我将一个非常简单的示例上传到了我的公共保管箱帐户:densityplot(我将在3天内删除该示例)。这是你想要的?
动画是使用以下R代码创建的:
library(animation)
density.ani <- function(){
i <- 1
d <- c(1,2,3,4)
while (i <= ani.options("nmax")) {
plot(density(d, kernel="gaussian", bw = i), ylim = c(0, 0.25))
ani.pause()
i <- i + 1
}
}
saveHTML({
par(mar = c(5, 4, 1, 0.5))
density.ani()
}, nmax = 30, title = "Changing kernel width")
这是另一种方法:
library(TeachingDemos)
d <- c(1,2,3,4)
tmpfun <- function(width=1, kernel='gaussian'){
plot(density(d, width=width, kernel=kernel))
}
tmplst <- list( width=list('slider', init=1, from=.5, to=5, resolution=.1),
kernel=list('radiobuttons', init='gaussian', values=c('gaussian',
"epanechnikov","rectangular","triangular","biweight","cosine",
"optcosine")))
tkexamp( tmpfun, tmplst, plotloc='left' )