rCharts(Polychart)で描画
rChartsからrPlot関数でPolychartを呼び出し、描画してみます。
散布図と回帰直線を1つのチャートとして描くために、Polychartでは、散布図の図上に回帰直線の図を重ねることを考えます。それぞれの図が別々のレイヤーに配置され、レイヤーを重ね合わせるイメージになります。
やり方は散布図のrPlot関数の結果をいったん、変数p1に格納します。そして、その図上に回帰直線をlayerとして重ねて描画します。
> p1 <- rPlot(dist ~ speed, data = cars, type = 'point', size = list(const = 5),
color = list(const = 'grey'))
> p1 # 散布図のみの描画
> cars.lines <- data.frame(cars['speed'], dist = predict(cars.lm)) # 回帰直線データ
> p1$layer(dist ~ speed, data = cars.lines, type = 'line',
color = list(const = 'blue'), copy_layer = T)
> p1 # 散布図と回帰直線を重ね合わせた図の描画
なんとか回帰直線のチャートを描画できました。R標準のabline関数のように、回帰直線を描画してくれる機能がrChartsにはないので、お手軽にとはいえません。少し手間がかかりますね。
なお、上記は画像イメージですが、実際に出力されたHTML上ではマウスオーバーすれば座標を返してくれます。
rCharts(Highcharts)で描画
回帰分析の最後に、hPlot関数でHighchartsを呼び出して描画してみたいと思います。
HighchartsはrPlotとは異なり、layerを使ってチャートを重ねることはできません。
その代わり、hPlotで複数種類の情報をもったデータを一気に指定することで、複数種類のチャートを1つの図上に描画することができます。つまり、回帰分析ではhPlot関数の引数として、散布図用の実データと回帰直線用の予測データを指定することで、散布図と回帰直線を同じ図の上に描画できます。やり方として、事前に散布図用データと回帰直線用データを、1つにまとめたデータフレームを作成する作業が必要になります。
# 散布図用データとしてtype 列を追加し、固定値 'scatter' を設定
> cars.scatter <- data.frame(cars, type = 'scatter')
# 回帰直線用データのtype 列は、固定値 'regression line' を設定
> cars.line <- data.frame(cars.lines, type = 'regression line')
# 散布図用データと回帰直線用データを上下に結合(rbind)
> cars.scatter_and_line <- rbind(cars.scatter, cars.line)
# type に複数のタイプを指定する。
> h1 <- hPlot(dist ~ speed, data = cars.scatter_and_line, group = 'type',
type = c('line', 'scatter'), radius = 5)
> h1$colors('blue', 'grey')
> h1
回帰直線が描画できましたが、データフレームを準備するのに手間がかかってしまいましたね。Highchartsは、完全に表示されるまでにアニメーションのあるチャートを描けるのが特徴です。
さらに、凡例中のオブジェクトをクリックすることで、動的にチャートの表示/非表示を切り替えることができます。具体的には、scatterをクリックすると、以下のとおり散布図が非表示になり、回帰直線のみにフォーカスできます。
Polychart、Highchartsそれぞれ、似たような見た目のチャートを描画することができますが、回帰直線を描画するまでのアプローチがまったく異なります。rChartsでは、使いたいJavaScriptライブラリごとに操作方法を覚える必要があるということになります。
クラスタ分析
今度は、クラスタ分析した結果をrChartsで描画してみたいと思います。
cars同様にR標準のサンプルデータセットであるiris(アヤメの花)を使います。irisにおいてクラスタ分析を行い、irisの特徴から花の品種を予測します。
クラスタ分析とは、与えられたデータの特徴から、似ているグループ(=クラスタ)にまとめて、グルーピング(クラスタリング)する方法です。数あるクラスタ分析方法の中でも今回はkmeans法(k平均法)という方法を用います。kmeans法とは、クラスタの平均を用いて計算を繰り返しながら、与えられた数K個の適切なクラスタに分類する方法です。詳しく知りたい方は、Wikipedia(K平均法)をご参照ください。
irisデータセットには以下の5つの属性があります。
- Sepal.Length:がく片の長さ
- Sepal.Width:がく片の幅
- Petal.Length:花びらの長さ
- Petal.Width:花びらの幅
- Species:アヤメの品種(setosa、versicolor、virginica)の3種類
このデータセットはすでに品種が判明しておりSpecisという属性もありますが、今回のクラスタ分析では、この属性は使わずに分析を行います。
irisデータの中身の確認をします。それぞれの3品種のデータが連続して50件ずつ、150件からなるデータセットです。1~50件目がsetosaという品種、51~100件目がversicolorという品種、101~150件目がvirginicaという品種になります。
> iris # iris のデータの中身を表示
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
(中略)
74 6.1 2.8 4.7 1.2 versicolor
75 6.4 2.9 4.3 1.3 versicolor
76 6.6 3.0 4.4 1.4 versicolor
77 6.8 2.8 4.8 1.4 versicolor
(中略)
147 6.3 2.5 5.0 1.9 virginica
148 6.5 3.0 5.2 2.0 virginica
149 6.2 3.4 5.4 2.3 virginica
150 5.9 3.0 5.1 1.8 virginica



