2

我正在使用动画包绘制 $x=sin(t)$ 和 $y=sin(t)^2$ 的参数曲线以及使用以下代码跟踪曲线的圆:

require(animation)
x <- seq(-1,1,length=20)
y <- x^2
plot(x,y,type="l")
library(animation)
ani.record(reset=TRUE)
t <- seq(0,4*pi,by=pi/30)
for (i in 1:length(t)) {
    points(sin(t[i]),sin(t[i])^2,pch=19,cex=2)
    ani.record()
    plot(x,y,type="l")  # I have a question in this line
 }
 ani.replay()

它可以工作(请复制并粘贴此代码),但录制需要相当长的时间。这是一条简单的曲线,但如果我想做复杂的曲线,完成动画录制将花费太多时间。我可能会改进的一件事是不使用第二个绘图功能来重绘抛物线以摆脱上一个绘图中出现的圆圈。有什么我可以让它变得更好的吗?

4

1 回答 1

2

基本的 R 包grDevices有两个功能,允许保存和回放绘图,专为以下情况而设计:

  • recordPlot()
  • replayPlot()

在我的机器上进行的一些主观测试似乎表明它比重​​新绘制整个情节要快:

require(animation)
x <- seq(-1,1,length=20)
y <- x^2
plot(x,y,type="l")
oopts <- ani.opts(interval=0.25)
p <- recordPlot()   # <== Record plot here =============
ani.record(reset=TRUE)
t <- seq(0,4*pi,by=pi/30)

for (i in 1:length(t)) {
  replayPlot(p)     # <== Replay plot here =============
  points(sin(t[i]),sin(t[i])^2,pch=19,cex=2)
}
ani.replay()
于 2012-08-12T04:00:25.820 回答