この記事は R Advent Calendar 2011 の8日目の記事です。
はじめに
さて、仕事で三次元散布図を描く必要がでてきました。
R は統計言語として有名ですが、グラフィクスに関しても得意分野です。
R なら三次元散布図も簡単に描けるだろうということで、少し調べてみました。
scatterplot3d
どうやら R には scatterplot3d という三次元散布図を描くためのパッケージがあるようです。
試しにそれを使ってみましょう。
今回はデータとして trees データを使用します。
install.packages("scatterplot3d") library("scatterplot3d") data(trees) scatterplot3d(trees)
簡単に描けました。さすが R。
しかし、これだけでは物足りません。
三次元散布図は角度によって見え方が変わります。
お客様にお渡ししたときに、好きな角度から見ていただけるようにしたいのです。
インタラクティブな三次元散布図
そこで、インタラクティブな三次元散布図は描けないだろうか?と思いました。
なんかこう、マウスでドラッグするとグリグリ動くようなイメージです。
ググってみると、インタラクティブな図を描く R パッケージがたくさん出てきます。
一部を試してみました。
RGLパッケージ
RGL パッケージについてはここ(R-Tips)とここが詳しいです。
これを使って三次元散布図を描いてみましょう。*1
install.packages("rgl") library("rgl") plot3d(trees$Girth, trees$Height, trees$Volume)
おお、別ウインドウが開いて三次元散布図が出てきました。
ドラッグするとグリグリと動きます。
良い感じですが、どうやって出力するんでしょうか?
ちょっと調べてみた感じでは PNG でしか出力できそうにありませんでした。
これでは使えません。
playwithパッケージ
次は playwith パッケージです。
GTK+ というのを使ってインタラクティブに R の図を編集できるのだそうです。
早速使ってみましょう。
install.packages("playwith") library("playwith") playwith(cloud(Volume ~ Height * Girth, data = trees))
こちらも別ウィンドウが開いて三次元散布図が出てきました。
左側の Pan というのをクリックするとドラッグで図を回転できるようになります(グリグリ動くという感じではないですが)。
これの凄いのは、散布図の一点を選択してラベルを付けたり色を変えたりが簡単にできるというところです。
まさにインタラクティブに図の編集ができます。
でも、やはり出力が静止図でしかできそうにないです。
これは別の用途だったら凄く便利だなー。
googleVisパッケージ
上の二つは出力に問題があったのですが、googleVis パッケージなら JavaScript で動く HTML ファイルを生成してくれます。
実際にやってみましょう。
install.packages("googleVis") library("googleVis") scatter <- gvisScatterChart(trees[1:2], options = list(legend = "none", hAxis = "{title:'Girth'}", vAxis = "{title:'Height'}")) plot(scatter)
ただまあ、難点は三次元散布図が無いってことなんですけどね。
この出力結果はここに置いておきますので遊んでみてください。
googleVis で出力可能な図のサンプルはここで見ることができます。
モーションチャートはローカルに保存すると動かなくなる(Webサーバ上でないと動かない)など制約はありますが、用途によっては便利だと思います。
まとめ
rgl | グリグリ動くが出力として静止図しかできない |
---|---|
playwith | インタラクティブに編集しながら静止図を描くには便利そう |
googleVis | JavaScript ファイルで出力できるが三次元散布図は無い |
結局、どれも使えねぇ (´;ω;`)
どうやらインタラクティブにグリグリ動く三次元散布図を作るのは無理そうです。
この方法は諦めて別のアプローチを試してみます。
アニメーションしてみる
三次元散布図をアニメーションで動かしてみましょう。
アニメーションを作るには、animation パッケージを使います。
animation パッケージの使い方については、ここに日本語で丁寧な解説があります。
animation パッケージでアニメーション動画を作成するには ImageMagic をインストールする必要があるみたいですが、今回は HTML 出力機能のみを使うので ImageMagic は必要ありません。
install.packages("animation") library("animation") library("scatterplot3d") ani.start() for(i in 0:35) { scatterplot3d(trees, angle = i*10+5) } ani.stop()
出力結果はこれです。
Play ボタンを押すと再生が始まります。
コマ送りのボタンも付いているので、好きなところで止めて観察できます。
HTML 出力なので、お客様の環境によって動かないということもなさそうです。
おわりに
というわけで、最終的にお客様に提出するのは HTML 出力されたアニメーションにしようと思います。
今回いろいろなパッケージを調べてみて、とても勉強になりました。
他にも何かいい感じのパッケージがありましたらご紹介いただければうれしいです。
以上です。
*1:ちょっと変更しました