Построение движущейся кривой временного ряда - PullRequest
1 голос
/ 05 февраля 2011

Для кривой временного ряда:

  1. Я хочу исправить размеры и метки графика.
  2. Затем нарисуйте движущуюся кривую на графике для некоторого анализа временных рядов. Например, свертка .

Как бы я достиг этого с R?

Ответы [ 2 ]

4 голосов
/ 05 февраля 2011

Два быстрых пункта:

  • старый трюк заключается в том, чтобы написать последовательность файлов gif по отдельности в цикле, а затем использовать такой инструмент, как imagemagick, чтобы «склеить» их вместе в анимированный gif

  • есть также пакеты более высокого уровня, такие как отмеченная наградами анимация , которые помогают с этим; некоторые функции могут зависеть от платформы

3 голосов
/ 05 февраля 2011

Вот базовый код для начала работы (вы можете добавить линии сетки, условные обозначения и т. Д., Если они важны для вас):

plotfun <- function(x) {
    plot( c(-0.5,-0.5,0.5,0.5), c(0,1,1,0), col='blue', xlim=c(-2,2),
         type='l', xlab='', ylab='' )
    if( x > -1 && x < 0 ) {
        polygon( c(-0.5, -0.5, x+0.5, x+0.5), c(0,1,1,0), col='yellow', border=NA )
        lines( c(-0.5, -0.5, 0.5, 0.5), c(0,1,1,0), col='blue' )
        lines( c(-1,x), c(0,x+1) )
    } else if( x >= 0 && x < 1 ) {
        polygon( c(x-0.5, x-0.5, 0.5, 0.5), c(0,1,1,0), col='yellow', border=NA )
        lines( c(-0.5, -0.5, 0.5, 0.5), c(0,1,1,0), col='blue' )
        lines( c(-1,0,x), c(0,1,1-x) )
    } else if (x >= 1) {
        lines( c(-1,0,1), c(0,1,0) )
    }
    abline(v=x, lty=3)
    lines( c(x-0.5,x-0.5,x+0.5,x+0.5), c(0,1,1,0), col='red' )
}

dev.new(height=3, width=6)

for(i in seq(-2.5, 2.5, 0.05) ) {
    plotfun(i)
    Sys.sleep(0.1)
}

вы можете заменить цикл for повторениемили while и управляйте приращением и автоматически сбрасывайте для выполнения нескольких циклов.

Вы также можете удалить Sys.sleep и поместить его в вызов функции saveMovie, saveHTML или другой функции из пакета анимации, чтобы создатьфайл с анимацией.

Еще один подход, позволяющий управлять анимацией путем перемещения ползунка вперед и назад:

library(TeachingDemos)

tkexamp( plotfun, list(x=list('slider', from=-2.5, to=2.5, resolution=0.01)),
    vscale=1)
...