动画显示低级绘图添加

时间:2015-11-13 17:38:45

标签: r animation knitr

在使用animation包的动画中,我想绘制一些点,然后累积累积连续添加线条(或其他图形元素)到绘图中。这就像在fig.show="all"块选项中使用knitr一样。

这是一个简单的测试:

library(animation)
myplot <- function() {
    x <- 1:10
    y <- x^2

    plot(x, y, pch=16, cex=1.5)
    for (i in 1:(length(x)-1)) {
        lines( c(x[i], x[i+1]), c(y[i], y[i+1]))
    }
}

但是,在此上使用saveHTML只会生成一个帧。所以,我尝试在此添加ani.record()

myplot1 <- function() {
    x <- 1:10
    y <- x^2

    plot(x, y, pch=16, cex=1.5)
    for (i in 1:(length(x)-1)) {
        lines( c(x[i], x[i+1]), c(y[i], y[i+1]))
        ani.record()
    }
}

并将其作为

运行
saveHTML({
        myplot1()   
}, img.name = "myplot1", imgdir = "myplot1_dir", htmlfile = "myplot1.html", 
    title = "myplot1 test")

然而,现在给出的是一系列帧,分别显示每个新行,而不是它们的累积效应。

最终,这将进入Rmdknitr运行的文档,但如果可能的话,我希望能够立即使用animation包开发动画。

1 个答案:

答案 0 :(得分:0)

为了记录,我将对我的问题给出部分答案:使用animation包可以很容易地完成我想要做的事情,因为它主要是为了制作动画而设计的一个&#34;完整&#34;的集合图形框架。

在循环中使用ani.record()是必要的,但我的myplot1()尝试 没有工作,因为它只记录了最近的一行,而不是累积序列。

下面的版本做得更好,方法是:(a)在循环内移动plot()调用,(b)从每个帧的1:i重新绘制所有行。

myplot2 <- function() {
    x <- 1:10
    y <- x^2

    for (i in 1:(length(x)-1)) {
        plot(x, y, pch=16, cex=1.5)
        lines( c(x[1:i], x[1:i+1]), c(y[1:i], y[1:i+1]))
        ani.record()
    }
}

saveHTML({
        myplot2()   
}, img.name = "myplot2", imgdir = "myplot2_dir", htmlfile = "myplot2.html", 
    title = "myplot2 test")