svgからswfに変換してアニメーションを作る

ここにあるようにanimationパッケージとImagemagickを使えばRのプロットからお手軽にアニメーションを作れるわけだが、Imagemagickをインストールするのがだるい。
このサイトのように画像をアップすればgifアニメを作ってくれるところもあるが、一括でアップできないので画像が100枚とかあると手が耐えられない。
ということで、libmingを使ってフラッシュアニメを作ってくれるR2SWFパッケージのご紹介。
libmingはパッケージに同梱されているので改めてインストールする必要はない。

以下のようなフラッシュができる。
(なお、はてなに埋め込む際にここのサービスを利用している。)

最初はやたら威勢がいいのに後半やけにスピードダウンするのが気になる。なぜだ。
しかも回帰直線がはみ出す。なぜだ。
ちなみに、svgで出力する際にCairoパッケージを用いていることに注意。

# http://d.hatena.ne.jp/teramonagi/20111031/1320063903 を参照
# Snap関数の定義以下を以下のように変更する

library(R2SWF)
library(Cairo)

Snap2 <- function(val){
  val.x <- na.omit(coredata(val)[ ,2])
  val.y <- na.omit(coredata(val)[ ,1])
  lm.xy <- lm(val.y~val.x)
  # 図中にテキストを書きこむとsvgに変換する際エラーが出るのでタイトルに書きこむようにする
  title <- paste("Beta :", sprintf("%.3f", coef(lm.xy)[2]), as.character(last(index(val))))
  plot(val.x, val.y, xlim = x.max, ylim = y.max, 
       xlab = x.lab, ylab = y.lab, main= title)
  abline(lm.xy)
  }

cycle <- 1:(nrow(returns)-size.window)

for(i in cycle){
    fn <- sprintf("Rplot%03d.svg", i)
    CairoSVG(fn)
    Snap2(returns[(i:(i+size.window)),])
    dev.off()
    }

filenames <- sprintf("Rplot%03d.svg", cycle)
output <- svg2swf(filenames, interval=0.01)

swf2html(output)