googlevis でいろいろ触れるプロットを作る

MikuHatsune2018-12-24

この記事はR Advent Calendar 2018 の24日目の記事です。
 
R でプロットするときに、標準ではgraphics のなかにあるplot を使ってべたなプロットを作ると思うが、最近ではggplot なんかが流行っている。
最近、プロット上にマウスカーソルを持ってくるとデータの内容を確認できる、html ベースの我らがgoogle 様のおつくりになったgooglevis というパッケージが使えるような、いややっぱ使えないような感じだったので紹介する。
 
とりあえずやってみると、自分のデフォルトで設定しているブラウザーナイル川の流量サンプル折れ線グラフができる。

library(googleVis)

dat <- data.frame(year=seq(tsp(Nile)[1], tsp(Nile)[2]), flow=Nile@.Data)
opt <- list(lineWidth=3, width=800, height=300, legend="none",
            title="Nile flow", vAxis="{title: 'Flow'}", hAxis="{title:'Year'}")
g <- gvisLineChart(dat, xvar="year", yvar="flow", options=opt)
plot(g)


 
ここで、作成したオブジェクト g は、html である。
R で描出する場合は、

plot(g)

で表示されるが、このhtml を流用すると、R 以外で使えるようになる。
ちなみに、プロットの下にある

Data: data &#8226; Chart ID: LineChartID15692e451cdc &#8226; googleVis-0.6.2
R version 3.4.4 (2018-03-15) &#8226; Google Terms of Use &#8226; Documentation and Data Policy

が邪魔な場合は、g の中のhtml を削除すればよい。具体的には

g$html$caption <- NULL
g$html$footer <- NULL

で消える。
例えば、このhtml をそのままサイトに貼り付けると、googlevis のAPI が勝手に理解して、サイト上でグラフにしてくれる。
はてなブログであれば、記事を書くときに「HTML 編集」モードがあるので、そこにベタ貼りして、プレビューすると、html 表示でgooglevis のグラフを見ることができる。ただし、HTML 編集モードで書き始めてしまった記事は、その後HTML 編集モードでないと編集できない仕様らしいので、HTML タグが分からない場合にお手軽記法が使えないと思うので少しハードルが高い。
おそらくQiita やgithub でもできそうな気がする。
はてなダイアリーではちょっと頑張ってもできなかったのであきらめた。どのみち2019年春に使えなくなるらしいのではてなブログへの移行をする時期なのか...
2019年春「はてなダイアリー」終了のお知らせと「はてなブログ」への移行のお願い - はてなダイアリー日記
googlevis が使いにくい点は、グラフをいじりたいときにgooglevis が定める仕様以外のことはなかなかしにくいことだと思う。
こちらを参考にパラメータをいじればどうにかなる。
 
サイトにHTML ベースの触れるプロットを埋め込む方法は他にもあって、例えば水平ラベルをいじりたいときに、hAxis をいじるわけだが、hAxis にはhAxis.color やhAxis.gridlines があり、さらにhAxis.gridlines にはhAxis.gridlines.color やhAxis.gridlines.count などが定められている。これらをリスト形式でひたすらoptions=... にいれるわけだが、例えば色を複数設定したいときには色の数と、どの範囲の値のときにその色を対応させるか、などを記述しないといけない。これがひたすらhoge.color に記載されないと色を読み込んでくれないわけだが、手打ちするのは面倒なのでそこはsprintf 関数などを使って機械的にテキスト処理するとなんとかなる。けっこう面倒だった。
あとネットにつながっていないとプロットされない。

 
html ベースの、いろいろ触れるプロットを作るには他にも方法があって、例えばplotly はその候補である。これはオフラインでも描出できるし、ブログにも貼り付け可能だが、ユーザー登録が必要(?) らしいので、何も考えずにhtml として貼り付けるならばgooglevis のほうがよさそうだった。