ほくそ笑む

R言語と統計解析について

三次元散布図をRで描くのに画期的な新機能がRGLパッケージに加わった

以前、三次元散布図をRで描いてみたという記事で紹介したRGLパッケージに画期的な新機能が加わったので紹介します。
(情報源:R: Interactive 3D WebGL plot of time-space cube with RGL | geolabs)
RGLパッケージの良いところは、3次元プロットをマウスドラッグでグリグリ動かせるところなのですが、いざ、ファイル出力しようとすると、静止画か動画でしか保存できず、インタラクティブな3次元プロットをそのままファイルに保存することができないというのが欠点でした。
しかし今回、新機能として、WebGL で動く HTML ファイルとして保存できる機能が付加されたようです。
さっそく試してみましょう。

install.packages("rgl")
library("rgl")
data(trees)
plot3d(trees)
writeWebGL(width=500, height=550)

trees データの3次元散布図をRGLで作成し、WebGL として保存しています。
WebGL での保存は最後の一行だけです。
なんと、たったこれだけで webGL というフォルダが作成され、その中に HTML ファイルが出来上がります。
実際に出力されたファイルを下記に置きました。私が試したところ Firefox 11 と Google Chrome 18 で動作しました。*1
http://dl.dropbox.com/u/432512/20120425/trees/index.html
マウスでドラッグすると、グリグリ動きます。すごい!

主成分分析で使ってみる

例えば、主成分分析なんかで第三主成分まで使った三次元散布図を作成するとき、今までは HTML で出力する手段がなかったのですが、これからはこれがかなり有効に使えそうです。

library("rgl")
data(iris)
pca <- prcomp(iris[-5], scale.=TRUE)
pcScores <- pca$x[, 1:3]
plot3d(pcScores, col=as.integer(iris[,5]))
writeWebGL(width=500, height=550)

出力結果 http://dl.dropbox.com/u/432512/20120425/pca/index.html
これでR環境の無い人にも解析結果を渡してグリグリしてもらえます!


キャンバスサイズや保存先フォルダなどもオプションにより指定できます。
詳しくはヘルプをご参照ください。

追記(2012/4/26)

mokjpnブログ: Rで年賀状 を参考に、龍の3D図を描いてみました。
http://dl.dropbox.com/u/432512/20120425/dragon/index.html
Firefox 12 では動きませんでしたが、Google Chrome 18 では動きました。

x <- scan("dragon_vrip_res2.ply", skip=10, sep="\n", what="charactor")
index <- grep("^[0-9.\\-][0-9.\\-]* [0-9.\\-][0-9.\\-]* [0-9.\\-][0-9.\\-]* $", x)

n <- length(index)
data <- matrix(nrow=n, ncol=3)
for(i in 1:n) {
  str <- x[index[i]]
  d <- sapply(strsplit(str, split=" "), as.double)
  data[i, ] <- d
}

library("rgl")
green <- 1 - 0.5 * (data[,1] - min(data[,1])) / diff(range(data[,1]))
col <- rgb(0, green, 0)
points3d(data, col=col)
view3d(theta=-30, phi=15, zoom=0.7)
writeWebGL(width=500, height=550)

*1:Safariなら「開発→WebGLを有効にする」だそうです https://twitter.com/#!/h_okumura/status/195022837403222017