シリーズ Useful R 9巻「ドキュメント・プレゼンテーション生成」のサプリメントです。 rChartsパッケージでhighchartsライブラリを使う方法についての補足です。
シリーズ Useful R / ドキュメント・プレゼンテーション生成 / Amazon
NVD3はd3.jsベースのグラフ描画ライブラリです。 インタラクティブな変数選択などが特徴的です。
dichikaさんによる解説 も参考になります。
NVD3は、2014年4月に入ってリファクタリングを行い、そして後方互換性を捨てました。 rChartsはNVD3 v1.1.10あたりをターゲットに作られています。NVD3 v2ではAPIが変更されるそうなので、使えなくなるかもしれません。
rCharts側でv2に対応する可能性も僅かながらあるので、更新情報はサポートサイトをチェックして下さい。
rChartsでNVD3を利用するには、nPlot
関数を呼び出してプロットオブジェクトを作成します。 プロットオブジェクトはNVD3ライブラリのAPIをラップしたメソッドを持っています。 このメソッドを通してチャートのカスタマイズを行うことができます。 但し、APIの情報が整っていないようなので、カスタマイズはなかなか大変です。公式サイトのサンプルを参考にしましょう。
NVD3では以下の様なチャートが利用できるようです。このいずれかをnPlot
のtype
引数で指定します。
ただし、NVD3の仕様変更に伴い、利用できるチャートは変更されるかもしれません。
type = "lineChart"
とします。 凡例の中のアイコンをクリックすると表示・非表示を切り替えることができます。
p <- nPlot(demand ~ Time, data = BOD, type = "lineChart")
p$show("inline", include_assets = FALSE)
下のパネルをマウスでグイッとやってみてください。
d <- data.frame(Time = 1:100, demand = rpois(100, 10))
p <- nPlot(demand ~ Time, data = d, type = "lineWithFocusChart")
p$show("inline", include_assets = FALSE)
chart
メソッド、xAxis
メソッド、yAxis
メソッドでカスタマイズします。 複数系列の場合は、縦長データを使ってgroup
で系列を示す変数を指定します。
x <- seq(-5, 5, len = 100)
d <- data.frame(x = x, y1 = sin(x), y2 = sin(x*2/3), y3 = sin(x*1/3))
d2 <- reshape2::melt(d, id = "x")
p <- nPlot(value ~ x, group = "variable", data = d2, type = "lineChart")
# chartオブジェクトのカスタマイズ
p$chart(margin = list(left = 100), # マージン
forceY = c(-1, 1), # Y軸範囲
useInteractiveGuideline = TRUE # マウスに反応するグリッドライン (rCharts付属のバージョンでは動かないかも)
)
# 軸のラベル
p$xAxis(axisLabel = "Time (ms)")
p$yAxis(axisLabel = "Voltage (V)")
p$show("inline", include_assets = FALSE)
NVD3では変数フィルタを利用することができます。
d <- expand.grid(g = LETTERS[1:3], c = letters[1:5], x = 1:10)
d$y <- rpois(nrow(d), 10)
p <- nPlot(y ~ x, group = "c", data = d, type = "lineChart")
p$addFilters("g")
p$show("iframesrc")
左右のY軸が異なるチャートです。使い方はトリッキーです。 このタイプのチャートは誤解を招きやすいので、使うときは注意しましょう。
d <- data.frame(expand.grid(x = 1:10, n = c("a", "b")), y = c(rpois(10, 10), rpois(10, 10)*100))
p <- nPlot(y ~ x, group = "n", data = d, type = 'multiChart')
p$set(multi = list(a = list(type="line", yAxis=1), b = list(type="area", yAxis=2)))
p$setTemplate(script = system.file("/libraries/nvd3/layouts/multiChart.html", package = "rCharts"))
p$show("inline", include_assets = FALSE)
ラインチャート以外の例も載せておきます。 カスタマイズなどは公式サイトのサンプルを参考にしましょう。
showDistX
、showDistY
で軸に分布を追加しています。
p <- nPlot(Sepal.Length ~ Sepal.Width, group = "Species", data = iris, type = "scatterChart")
p$chart(showDistX = TRUE, showDistY = TRUE)
p$show("inline", include_assets = FALSE)
マウスクリックすると、スタック形式を選べます。
hair_eye <- as.data.frame(HairEyeColor)
p <- nPlot(Freq ~ Hair, group = 'Eye', data = subset(hair_eye, Sex == "Female"), type = 'multiBarChart')
p$show("inline", include_assets = FALSE)
d <- data.frame(label = c("'92 巣立ち", "'95 秘密", "'98 時代", "'02 遺言"), value = c(32, 30, 25, 38))
p <- nPlot(value ~ label, data = d, type = 'pieChart')
p$chart(donut=TRUE)
p$show("inline", include_assets = FALSE)
tooltipContent
でマウスオーバーでポップアップするツールチップをカスタマイズできます。
d <- data.frame(label = c("'92 巣立ち", "'95 秘密", "'98 時代", "'02 遺言"), value = c(32, 30, 25, 38))
p <- nPlot(value ~ label, data = d, type = 'pieChart')
p$chart(donut=TRUE)
p$chart(tooltipContent = "#! function(l, v){ return l + 'の視聴率は' + v;} !#")
p$show("inline", include_assets = FALSE)