前回はRとウェブの融合に役立つツール群を紹介して、JavaScript可視化ライブラリを利用するためのrChartsパッケージを取り上げました。 今回はrChartsの使い方を解説して、Highchartsの利用法を詳細に説明します。
rChartsでは最初にプロットオブジェクトを作成して、 プロットオブジェクトのメソッドを通してプロットのカスタマイズを行ったり、プロットを様々な形で出力したりします。
以下の例ではデータがBOD
、X軸の変数がTime
、Y軸の変数がdemand
であるHighcharts用のプロットオブジェクトを作成しています。
> library(rCharts)
> p <- hPlot(demand ~ Time, data = BOD)
p
がプロットオブジェクトです。p$...()
としてオブジェクトのメソッドを呼び出します。
以下の例ではプロットのサイズを変更して、タイトルを設定しています。
> p$set(width = 400, height = 200)
> p$title(text = "BODデータ")
Javascript可視化ライブラリによってオプションが異なるため、 カスタマイズのためのメソッドは使用するライブラリに応じて異なるものもあります。 全てを網羅的に習得するのは困難ですし、その必要もないでしょう。その都度、出力したいプロットのサンプルを真似すれば良いと思います。 なお、開発版のrChartsではデモを利用することが出来るようになっています。
> # 利用できるデモ一覧
> demo(package="rCharts")
> # Highchartsのデモを表示
> demo(highcharts)
プロットオブジェクトを表示するには、単にそのオブジェクトを評価します。
> p <- hPlot(demand ~ Time, data = BOD)
> p
一時ファイルが作成されてブラウザでプロットが表示されます。
プロットを任意のHTMLファイルに保存するにはsave()
メソッドを用います。
> p$save("BOD.html")
> browseURL("BOD.html") # ブラウザで表示
既定の動作では、インストールしたrChartsに付属のjavascriptライブラリが用いられます。
従って、インストール先が異なるなど、別のコンピュータ上ではHTMLファイルを表示できない可能性があります。
このような場合は、cdn=TRUE
としてオンラインリソースを使うようにします。
> p$save("BOD_cdn.html", cdn = TRUE)
ここで作成されたBOD_cdn.html
は、インターネットにアクセスさえできればどのような環境でもプロットを表示できます。
また、rChartsのプロットをknitrのレポートで用いる方法については前回の記事を参考にして下さい。
Highchartsは非常に多機能なグラフ描画ライブラリです。まずはデモサイト( http://www.highcharts.com/demo )をご覧ください。
Highchartsのプロットオブジェクトは次のようにhPlot()
により作成します。
> hPlot(yval ~ xval, group = "g", data = df, type = "column")
> hPlot(x = "xval", y = "yval", group = "g", data = df, type = "line")
hPlot()
にはデータ(データフレーム形式)、x軸用の変数、y軸用の変数、グループ化用の変数、プロットの種類などを渡します。
変数の指定には文字列またはフォーミュラ式を用います。
type
引数によりプロットの種類を指定します。主なプロットの種類は次の通りです。
area, arearange, areaspline, bar, boxplot, column, gauge, line, pie, scatter, spline,
Highchartsで可能なカスタマイズについてはAPI一覧( http://api.highcharts.com/highcharts )を参考にして下さい。 この中でrChartsがサポートしているAPIは以下の通りです。
chart, colors, credits, exporting, labels, legend, loading, navigation, pane, plotOptions, series, subtitle, title, tooltip, xAxis, yAxis
これらのメソッドに対して引数名をAPIと対応させてオプションを渡します。 オプションが文字列や数値ではなくjavascriptオブジェクトの場合は、名前付きリストで渡します。 次の例ではX軸、Y軸、凡例をカスタマイズしています。軸ラベルや凡例の位置が変更されて、Y軸が対数スケールになっています。
> p <- hPlot(circumference ~ age, group = "Tree", data = Orange)
> p$xAxis(title = list(text = "樹齢"))
> p$yAxis(title = list(text = "幹周"), type = "logarithmic")
> p$legend(layout = "vertical", align = "right", verticalAlign = 'middle')
> p
Highchartsでは異なる種類のプロットを重ねて表示することができます(図2左)。
折れ線グラフ(line
)と範囲グラフ(arearange
)を重ねることで、誤差範囲や信頼区間の表示を行うことができます。
プロットを重ねるにはseries()
メソッドによってデータ、プロットの種類、オプションなどを指定します。
データを指定するにはtoJSONArray2()
という関数を使います。
> # データ
> d <- data.frame(x = 1:12, y = rnorm(12))
> # 区間用のデータ
> d2 <- data.frame(x = 1:12, y0 = d$y-1, y1 = d$y+1)
> # プロットオブジェクトの作成(線グラフ)
> p <- hPlot(y ~ x, data = d, type = "line")
> # 区間表示の追加
> p$series(data = toJSONArray2(d2, json = F, names = F), type = "arearange", fillOpacity = 0.3, zIndex = 0, lineWidth = 0)
> p
Javascriptによる可視化では、マウスオーバーで値を参照するなどインタラクティブなプロットを作成することができます。
Highchartsはツールチップをサポートしていて、既定の動作でもプロット上にマウスを乗せると値が表示されます。
tooltip()
メソッドによって、ツールチップの表示内容をカスタマイズすることができます(図2中)。
formatter
にはjavascriptのコールバック関数を文字列で渡しますが、javascript上では文字列ではなくリテラルとして評価する必要があるので、
"#! ... !#"
という形式で関数を渡します。
> p <- hPlot(Sepal.Length ~ Sepal.Width, group = "Species", data = iris, type = "scatter")
> p$tooltip(formatter = "#! function() {return '種類は' + this.series.name + '<br/>ガクの幅は' + this.x + '<br/>ガクの長さは' + this.y;} !#")
> p
Highchartsはプロット内の任意の領域にズームする機能をサポートしています。
細かいデータの一部分を詳細に把握するのに便利な機能です。
chart()
メソッドでzoomType
にズームを可能にする軸(“x"、"y"、"xy"のいずれか)を渡します。
ズームするにはプロット領域をマウスでドラッグします。プロット上のReset zoom
というボタンをクリックすると元に戻ります(図2右)。
> p$chart(zoomType = "xy")
> p
プロットは全体の傾向を一目で把握するのに適している一方、具体的な数値を読み取ることが難しいという欠点があります。
具体的な数値を示す場合は、ツールチップを使ってマウス操作に応じて数値を表示させるという方法の他に、
プロット内の点に数値による注釈(データラベル)を付けておくこともできます。
次の例ではplotOptions
APIを利用して折れ線グラフに対してデータラベルを有効にしています。
> p <- hPlot(demand ~ Time, data = BOD)
> p$plotOptions(line = list(dataLabels = list(enabled = TRUE)))
> p
Highchartsで利用できるプロットの例をいくつか掲載しておきます。 またRpubs( http://rpubs.com/kohske/12409 )には拙著「ドキュメント・プレゼンテーション生成」(共立出版)用の補足資料として、これ以外の例も掲載してあるので参考にして下さい。
plotOptions
APIで棒の積み上げ形式を指定しています(図3左)。
> p <- hPlot(value ~ Var1, group = "Var2", reshape2::melt(VADeaths), type = "column")
> p$plotOptions(column = list(stacking = "percent"))
> p
X軸を対数スケールにして、エリアの透明度を変更しています(図3中)。
> p <- hPlot(conc ~ time, group = "Subject", Indometh, type = "area")
> p$xAxis(type = "logarithmic")
> p$plotOptions(area = list(fillOpacity = 0.15))
> p
plotOptions
APIで中心の穴の大きさを指定しています(図3右)。
> p <- hPlot(value ~ label, data.frame(value = islands, label = names(islands))[1:4, ], type = "pie")
> p$plotOptions(pie = list(innerSize = "60%"))
> p
今回はHighchartsについて詳しく解説しました。Highchartsは非常に多機能なグラフ描画ライブラリです。 今回紹介したように、rChartsを使うとjavascript可視化ライブラリをR上で簡単に利用することができます。 R付属のグラフィックスでは利用できないツールチップやズームなど、Rとウェブの融合の力を是非味わってみてください。 次回はHighcharts以外のライブラリの利用法を簡単に説明します。