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)