データを扱うレポートには、
なお、
JavaScriptを使った可視化などは現在でもアクティブに開発が進められていて、
グラフを極める
前回までの記事で紹介しているように、ggplot2
パッケージのグラフ出力などでも問題なく利用できます。
なおチャンクオプションfig.
によってグラフのキャプションを指定することができます。この場合、fig_
を指定することが必要です。
---
output:
html_document:
fig_caption : true
---
正弦波です。
```{r fig.cap="図1: 正弦波", echo=FALSE}
curve(sin(x), -10, 10)
```
サンプル出力はこちらです。
また、fig.
などのチャンクオプションで指定します。
rgl
パッケージによるインタラクティブな3Dグラフ
多次元データを可視化したい時など、
Rでは{rgl}
パッケージによって視点変換が可能なインタラクティブな3Dグラフを簡単に作成できます。さらにHTMLレポートではWebGLというOpenGLをブラウザ上で表示する技術により、{rgl}
で作成したグラフをレポートに埋め込むことができます。
{rgl}
のグラフを埋め込むには、knit_
としてフック関数を登録して、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[[5]]])
```
サンプル出力はこちらです。
JavaScriptライブラリを用いたインタラクティブなグラフ
JavaScriptは暗黒の時代を乗り越え、D3.
を中心として、
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を用いた可視化技術は現在、
テーブルを極める
グラフは視覚に強く訴えるインパクトのある可視化技術ですが、
突然ですが、
- Excel
- エクセル
- ゑくせる
- その他
1から3を選んだあなたは間違いなくコピペ汚染されていますね。そんなあなたは連載第1回を読み直してください。
R Markdownのアプローチでは、{knitr}
パッケージのkable()
関数を使うのが一番簡単な方法でしょう。
# irisの先頭
```{r, echo=FALSE}
knitr::kable(head(iris))
```
次のようなテーブルが出力されます
Sepal. |
Sepal. |
Petal. |
Petal. |
Species |
---|---|---|---|---|
5. |
3. |
1. |
0. |
setosa |
4. |
3. |
1. |
0. |
setosa |
4. |
3. |
1. |
0. |
setosa |
4. |
3. |
1. |
0. |
setosa |
5. |
3. |
1. |
0. |
setosa |
5. |
3. |
1. |
0. |
setosa |
- 編集部注)
- gihyo.
jpのスタイルシートを当ててあります。
たった、
kable()
以外にも、{tables}
パッケージがあります。ドキュメント生成本で詳しく解説されていますので参考にしてください。
JavaScriptライブラリを用いたインタラクティブなテーブル
テーブルは正確に数値を把握できる反面、
ここで再びJavaScriptです。HTMLレポートでは、
ここではDataTables
ライブラリを使うための{DT}
パッケージを紹介します。mtcars
データをテーブルで表示してみましょう。
```{r, echo=FALSE}
library(DT)
datatable(mtcars)
```
これだけです。これだけで、
なんということでしょう。Search
と書かれた検索ボックスはただの飾りではありません。試しにMazda
と入力してみてください。フィルタリングです。テーブルヘッダをクリックしてみてください。ソートです。これは感動モノですね。
アクセスログを整形してレポートで提出する時、
ダイアグラムを極める
グラフとテーブル以外に、{Rgraphiz}
、{diagram}
最近になって、{DiagrammeR}
パッケージというJavaScriptライブラリを使ったダイアグラム作成パッケージの開発が進められています。ちなみに開発者はイケメンです。
{DiagrammeR}
を使えば、grViz()
関数でgraphvizベースのダイアグラムを書くのがよいでしょう。記法は基本的にgraphviz
の書式に従っています。
```{r echo=FALSE}
library(DiagrammeR)
grViz('
digraph {
rankdir=LR
node [shape = box,
style = rounded,
fontname = Helvetica]
太る [shape = egg]
食べる -> 飲む
飲む -> 飲む
飲む -> 酔う
飲む -> 寝る
酔う -> 太る
寝る -> 太る
}
')
```
サンプル出力はこちらです。
この手のフローチャートであれば{DiagrammeR}
では、data.
で定義してダイアグラムを作成することもできます。データドリブンのダイアグラムの場合はこちらの方がよいでしょう。以下に一例を示します。
```{r}
library(DiagrammeR)
set.seed(23)
library(rvest)
h = html("https://twitter.com/teramonagi/lists/list/members")
L = h %>% html_nodes(xpath="//*/div/div/div/a/strong") %>% html_text()
n = create_nodes(nodes = L)
e = create_edges(from = sample(L, replace = TRUE),
to = sample(L, replace = TRUE))
g =
create_graph(nodes_df = n,
edges_df = e,
graph_attrs = "layout = twopi",
node_attrs = c("fontname = Helvetica"))
render_graph(g)
```
サンプル出力はこちらです。
このように、rvest
を使って取得して、
{DiagrammeR}
ではこれ以外にもガントチャートやシーケンス図の作成も可能です。{DiagrammeR}
は現在アクティブに開発が進められている最中で、
ダイアグラム作成のオートメーション化、
まとめ
今回はレポートで使える可視化手法としてグラフ、
また、
余談ですが、
R Markdownとは全く関係のない余談でした。チャオ!!
次回は
これまで、