シリーズ Useful R 9巻「ドキュメント・プレゼンテーション生成」のサプリメントです。 rChartsパッケージでhighchartsライブラリを使う方法についての補足です。
シリーズ Useful R / ドキュメント・プレゼンテーション生成 / Amazon
Highchartsはヒジョ〜〜に多機能なグラフ描画ライブラリです。
rChartsでHighchartsを利用するには、hPlot関数を呼び出してプロットオブジェクトを作成します。 プロットオブジェクトはHighchartsライブラリのAPIに対応したメソッドを持っているので、 このメソッドを通してチャートのカスタマイズを行うことができます。
メソッドには名前付きリストでオプションを渡します。これはJavascriptの中ではJSON形式に変換されます。
例えば、X軸のカスタマイズを行うには以下のようにします。 オプション指定はややこしいのですが、慣れてくるとなんとなくで使えるようになります。 慣れるまでは色々と試してみてください。
p <- hPlot(y ~ x, data = data.frame(x = letters[1:4], y = runif(1:4)), type = "column")
p$xAxis(title = list(text = "X軸タイトル"), categories = list("あ", "い", "う", "え"))
p$show("inline", include_assets = FALSE)
rChartsではHighchartsライブラリのAPIの大部分をサポートしています。
オプションの詳細はHighchartsライブラリのAPIやHighchartsのデモを見て下さい。
デフォルトはラインチャートになります。 ここではlegendで凡例の縦ならべで右表示に変更しています。 またデータラベルを有効にしています。見づらいっ!!
d <- expand.grid(g = letters[1:4], x = 1:12)
d$y <- rpois(nrow(d), 100)
p <- hPlot(y ~ x, group = "g", data = d)
# 凡例の変更
p$legend(layout = "vertical", align = "right", verticalAlign = 'middle')
# データラベルを有効に
p$plotOptions(line = list(dataLabels = list(enabled = TRUE)))
p$show("inline", include_assets = FALSE)
type="spline"とするとスプライン補間されます。 ここではx軸方向のズームを有効にしています。マウスでグリっと横方向にドラッグしてみてください。
d <- expand.grid(g = letters[1:4], x = 1:12)
d$y <- rpois(nrow(d), 100)
p <- hPlot(y ~ x, group = "g", data = d, type = "spline")
# ズームの指定
p$chart(zoomType = "x")
p$show("inline", include_assets = FALSE)
type="area"でエリアチャートです。ここでは見やすいようにyAxisでY軸の下限を変更しています(ホントはよくない><)。
d <- expand.grid(g = letters[1:4], x = 1:12)
d$y <- rpois(nrow(d), 100)
p <- hPlot(y ~ x, group = "g", data = d, type = "area")
# y軸範囲の変更
p$yAxis(min = min(d$y)-1)
p$show("inline", include_assets = FALSE)
plotOptionsで割合表示の積み上げにしています。 stacking = "normal"とすると通常の積み上げエリアチャートになります。
d <- expand.grid(g = letters[1:4], x = 1:12)
d$y <- rpois(nrow(d), 100)
p <- hPlot(y ~ x, group = "g", data = d, type = "area")
# スタック形式の設定
p$plotOptions(area = list(stacking = "percent"))
p$show("inline", include_assets = FALSE)
type = "arearange"とすると区間表示できます。信頼区間の表示にいいですね。 ここではまずラインチャートを作成して、そこにseriesで新たにデータと描画形式を追加しています。 このように、seriesによって違うタイプのチャートを組み合わせることができます。
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$show("inline", include_assets = FALSE)
縦向きの棒はコラムチャート、横向きの棒はバーチャートです。
type = "bar"でバーチャートです。plotOptionsでスタックの形式を指定できます。
hair_eye <- as.data.frame(HairEyeColor)
p <- hPlot(Freq ~ Hair, group = 'Eye', data = subset(hair_eye, Sex == "Female"), type = 'bar')
# 積み上げに
p$plotOptions(series = list(stacking = "normal"))
# 凡例のタイトルを追加
p$legend(title = list(text = "Eye"))
p$show("inline", include_assets = FALSE)
年代別人口とかでよく見るやつですね。
ここではhPlotではなくHighcharts$new()で空のプロットオブジェクトを作成して、データや軸を追加していっています。 なお、カテゴリカルな変数は文字列だと辞書順に並べ替えられてしまうので、factor型にしてレベルを明示しましょう(ggplot2と同じです)。
ages <- factor(1:10, labels = paste0("〜", 1:10*10))
d <- data.frame(age = ages, M = 1:10+runif(10), F = 1:10+runif(10))
# まず空のプロットオブジェクト
p <- Highcharts$new()
# バーチャートに設定
p$chart(type = "bar")
# 男性のデータ追加
p$series(name = "男性", data = -d$M)
# 女性のデータ追加
p$series(name = "女性", data = d$F)
# 左側の軸
p$xAxis(reversed = FALSE, categories = ages)
# 右側の軸。replace = FALSEを忘れずに。
p$xAxis(opposite = TRUE, linkedTo = 0, reversed = FALSE, categories = ages, replace = FALSE)
# 積み上げに
p$plotOptions(series = list(stacking = "normal"))
# タイトルなど
p$title(text = "2100年の年代別人口")
p$subtitle(text = "データは適当")
p$show("inline", include_assets = FALSE)
type = "column"でコラムチャート(横向きの棒グラフ)です。 ここではラベルをカスタマイズしています。
hair_eye <- as.data.frame(HairEyeColor)
p <- hPlot(Freq ~ Hair, group = 'Eye', data = subset(hair_eye, Sex == "Female"), type = 'column')
# データラベルの追加
p$plotOptions(column = list(dataLabels = list(enabled = T, rotation = -90, align = 'right', color = '#FFFFFF', x = 4, y = 10)))
# X軸のテキストをカスタマイズ
p$xAxis(type = "category", labels = list(rotation = 90, align = "left"))
# 凡例にかぶるのでマージンを変更
p$legend(margin = 30)
p$show("inline", include_assets = FALSE)
type = "pie"でパイチャート。
d <- data.frame(label = letters[1:4], value = runif(4))
p <- hPlot(value ~ label, data = d, type = 'pie')
p$show("inline", include_assets = FALSE)
普通のドーナツチャートです。
d <- data.frame(label = letters[1:4], value = runif(4))
p <- hPlot(value ~ label, data = d, type = 'pie')
p$plotOptions(pie = list(innerSize = "60%"))
p$show("inline", include_assets = FALSE)
視聴率に円グラフは、ダメですよ。 これはあくまでサンプルです。 なお、endAngleはrCharts付属のHighchartsライブラリのバージョンでは使えないようです。
d <- data.frame(label = c("'92 巣立ち", "'95 秘密", "'98 時代", "'02 遺言"), value = c(32, 30, 25, 38))
p <- hPlot(value ~ label, data = d, type = 'pie')
p$plotOptions(pie = list(innerSize = "80%", startAngle = -90, endAngle = 90, center = list("50%", "75%")))
p$title(text = "北の国から<br/>視聴率", align = "center", verticalAlign = "middle", y = 50)
p$show("inline", include_assets = FALSE)
例えば階層的なカテゴリの割合を表現するにはいいかもしれません。
library(plyr)
# 例えばこういうデータ
d <- data.frame(m = sample(LETTERS[1:2], 1000, TRUE, c(0.2, 0.8)), n = sample(letters[1:5], 1000, TRUE, 1:5/10))
# 1層目用データ
d1 <- toJSONArray2(count(d, .(m)), json = F, name = F)
# 2層目用データ
d2 <- toJSONArray2(count(d, .(m, n))[-1], json = F, name = F)
# 空のプロットオブジェクト
p <- Highcharts$new()
p$chart(type = "pie")
# 1層目の作成
p$series(data = d1, size = "50%", dataLabels = list(enabled = FALSE), colors = hsv(c(0, 0.5), 0.8, 0.8))
# 2層目の作成
p$series(data = d2, size = "80%", innerSize = "60%",
colors = hsv(rep(c(0, 0.5), each = 5), seq(0.2, 0.8, len = 5), seq(0.5, 0.8, len = 5)),
replace = FALSE)
p$show("inline", include_assets = FALSE)
type = "scatter"で散布図です。
p <- hPlot(Sepal.Length ~ Sepal.Width, group = "Species", data = iris, type = "scatter")
p$show("inline", include_assets = FALSE)
プロット上でマウスをドラッグするとその領域にズームします。
p <- hPlot(Sepal.Length ~ Sepal.Width, group = "Species", data = iris, type = "scatter")
p$chart(zoomType = "xy")
p$show("inline", include_assets = FALSE)
オプション指定すればHighchartsのデモ にあるようにいろいろデコれます。
d <- data.frame(value = c(42))
p <- hPlot(x = "value", y = NULL, data = d, type = 'gauge')
p$show("inline", include_assets = FALSE)
3DグラフはrCharts付属のHighchartsのバージョンでは使えないようです。 使わなくていいと思います。
d <- data.frame(x = 1:10, y = runif(10))
p <- hPlot(y ~ x, data = d)
p$chart(type = "column",
margin = 75,
options3d = list(enabled = TRUE, alpha = 15, beta = 15, depth = 50, viewDistance = 25))
p$show("inline", include_assets = FALSE)
d <- data.frame(x = LETTERS[1:5], y = runif(5))
p <- hPlot(y ~ x, data = d)
p$chart(type = "pie",
options3d = list(enabled = TRUE, alpha = 45, beta = 0))
p$plotOptions(pie = list(depth = 35))
p$show("inline", include_assets = FALSE)
tooltipメソッドでマウスオーバーでポップアップするツールチップをカスタマイズできます。 オプションの詳細はHighchartsのAPI を参考にして下さい。
p <- hPlot(Sepal.Length ~ Sepal.Width, group = "Species", data = iris, type = "scatter")
p$tooltip(formatter = "#! function() {return 'xは' + this.x + 'で、yは' + this.y;} !#")
p$show("inline", include_assets = FALSE)
Enjoy!!