R Markdownで楽々レポートづくり

第5回 レポートを彩るデータ可視化 ~グラフとテーブルとダイアグラム~

この記事を読むのに必要な時間:およそ 4 分

データを扱うレポートには,グラフやテーブルなど,データの可視化が不可欠です。今回は特にR MarkdownでHTML形式のレポートを作成する時に役立つ可視化手法について紹介します(PDFレポートなどでも使える手法もあります)。可視化においてもコピペ汚染の排除,再現性の確保,すなわちオートメーション化が最重要課題であることに変わりはありません。今回紹介する手法は全て,外部グラフ作成ツールやテーブル作成ツールなどを使うこと無く,.Rmdファイルの中で完結できるようになっています。

なお,それぞれの手法についての詳細な解説は避けて,どのようなことができるのかを広く浅く紹介します。というのも,レポートを作る際には自分が使う手法をきちんと使えれば充分で,全ての手法に精通している必要はないからです(誌面が足りないというのと執筆時間が足りないというのもあります)。今回の記事を一通り眺めてもらって,R Markdownでどのような可視化が利用できるのかをなんとなく認識してください。そして,自分が使いたいと思った可視化手法については,さらに突っ込んで学習してみるとよいでしょう。

JavaScriptを使った可視化などは現在でもアクティブに開発が進められていて,充分な日本語リファレンスが存在しない場合もあります。質問など,コメント欄またはツイッター @kohskeまで気軽にどうぞ。また,tokyo.Rの有志によるGitHubベースの気軽なQ&Aサイト「Rワカラング」というものが,最近開設されたようです。チャットルーム要メールアドレス登録も準備されたようです。是非活用してください。

グラフを極める

前回までの記事で紹介しているように,R Markdownでグラフを扱うのはとても簡単です。プロット関数を記述すれば,出力されるグラフを自動的にレポートに埋め込んでくれます。ggplot2パッケージのグラフ出力などでも問題なく利用できます。

なおチャンクオプションfig.capによってグラフのキャプションを指定することができます。この場合,YAMLヘッダでfig_caption: trueを指定することが必要です。

---
output:
  html_document:
    fig_caption : true
---

正弦波です。

```{r fig.cap="図1: 正弦波", echo=FALSE}
curve(sin(x), -10, 10)
```

サンプル出力はこちらです。

また,グラフの大きさは本連載第3回の記事で紹介したfig.widthなどのチャンクオプションで指定します。

rglパッケージによるインタラクティブな3Dグラフ

多次元データを可視化したい時など,XY軸だけのグラフでは物足りない場合があります。このような時には3Dグラフを使うとよいでしょう。ちなみに3Dグラフというのは,無意味に奥行きがついて立体になったグラフのことではなく,XYZの3軸をもつグラフのことです。

Rでは{rgl}パッケージによって視点変換が可能なインタラクティブな3Dグラフを簡単に作成できます。さらにHTMLレポートではWebGLというOpenGLをブラウザ上で表示する技術により,{rgl}で作成したグラフをレポートに埋め込むことができます。

{rgl}のグラフを埋め込むには,前回紹介したフックを使います。フック関数は組み込みで提供されているので,まず,knit_hooks$set(webgl = hook_webgl)としてフック関数を登録して,チャンクオプションでwebgl=TRUEとしてフックを有効にします。

```{r setup, include=FALSE}
library(knitr)
library(rgl)
knit_hooks$set(webgl = hook_webgl)
```

# irisの3D可視化

グリグリできるよ〜〜

```{r, webgl=TRUE, echo=FALSE}
plot3d(iris[1:3], col=rainbow(3)[iris])
```

サンプル出力はこちらです。

JavaScriptライブラリを用いたインタラクティブなグラフ

JavaScriptは暗黒の時代を乗り越え,いまやWebにおけるスターダム技術です。可視化分野でも,D3.jsを中心として,JavaScriptのパワーをフルに活かした各種ライブラリが開発されています。一方,RでもこれらのJavaScriptライブラリを簡単に扱うためのパッケージが多数リリースされています。これらのパッケージを使うと,R Markdownで作成するHTMLレポートの中にJavaScriptライブラリによる可視化データを埋め込むことができます。

JavaScriptライブラリによる可視化のメリットとして,グラフをインタラクティブに操作できるという点が挙げられます。例えば一部ズームする,データの値をツールチップで表示する,などなど,とても強力で柔軟なデータ表現が可能です。ただ絵として描かれたグラフを貼り付けるという従来のレポートの概念を覆すものです。

ここではdygraphsライブラリを使うための{dygraphs}パッケージを紹介します。

# 時系列の可視化

表示幅など,インタラクティブに操作できます。

```{r, echo=FALSE}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)

dygraph(lungDeaths) %>%
  dySeries("mdeaths", label = "Male") %>%
  dySeries("fdeaths", label = "Female") %>%
  dyOptions(stackedGraph = TRUE) %>%
  dyRangeSelector(height = 20)
```

サンプル出力はこちらです。是非グラフを操作してみてください。

RとJavaScriptを用いた可視化技術は現在,急速に進歩しています。JavaScript可視化を行うためのパッケージのリストや,各パッケージの使い方がまとめられたリソースは今のところ見当たりません。興味がある方はリクエストを送ってもらえば,「R+JavaScriptによる可視化」みたいな連載が企画されるかもしれません。

著者プロフィール

高橋康介(たかはしこうすけ)

東京大学先端科学技術研究センター特任助教。専門は認知科学,認知心理学,認知神経科学。どうやったら人が幸せな気持ちになれるのか研究中。著書に「R言語上級ハンドブック」(分担執筆・C&R研究所),「ドキュメント・プレゼンテーション生成」(共立出版)。趣味はラテ・アート。

コメント

  • R + JAVASCRIPTを希望

    岡山大学整形外科の中原と申します。

    連載すべて読ませていただきました。
    とても勉強になりました。
    特に姉妹の掛け合いが面白かったです。

    ぜひ次の連載が読みたいです。
    R + JAVASCRIPT のような内容が希望です。

    今までは頭をひねりながらd3を学んでいましたが、dygraphsを見て、もう勉強しなくていいんだとほっとしました。

    ホビーユーザーとしてはそう言ったお気楽パッケージの存在はありがたいです。

    よろしくお願いします。

    Commented : #1  中原龍一 (2015/12/15, 20:43)

コメントの記入