Tsukuba.R#9での発表に向けてggplot2の勉強を始めた.これまで調べたことを軽くまとめてみる.
ggplot2とは
高度な2Dグラフィックの描画について統一的な操作を提供してくれるライブラリ.「The Grammar of Graphics」という思想に基づいていて,ユーザがデータのどの部分に注目したいかを記述していくだけで簡単にきれいなグラフを得られるようになっている.
ggplot2のインストール
いつも通り.
> install.packages("ggplot2")
ggplot2で図を描画する
ggplot2で図を描画する方法は主に以下の2通り.
- qplot関数を使う
- 自分が得たいグラフに合わせてレイヤーオブジェクトを組み合わせる
ここでは以下のggplot2パッケージ付属のdiamondsサンプルデータを使い,それぞれの方法でいくつか図を描画してみる.
> library(ggplot2) > head(diamonds) carat cut color clarity depth table price x y z 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 4 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 > dim(diamonds) [1] 53940 10
このデータの詳細が知りたい場合はヘルプを参照しよう.
> ?diamonds
qplot関数を使う
ggplot2にはqplot関数(Quick PLOT)が用意されている.これはRのplot関数と似たインターフェイスを持っていて,引数を指定していくことで任意の図を描画することができるようになっている.
以下にqplot関数を使った場合の例を示す.
> qplot(carat, price, data = diamonds, colour = clarity, log = "xy")
> qplot(depth, data = diamonds, binwidth = 0.2, xlim = c(55, 70), facets = ~ cut)
値(離散値,連続値)と色の対応関係やグラフの凡例などはqplot関数がよしなにやってくれる.
Rのplot関数に慣れていて,かつggplot2を初めて触るような人にはかなり扱いやすいのではないかと思う.しかし,描画するグラフが複雑で引数が多くなる場合は,次に説明する方法を検討してみた方がいいかもしれない.
自分が得たいグラフに合わせてレイヤーオブジェクトを組み合わせる
こちらの方がggplot2の本領と言っていいだろう.
この方法では,ggplot関数で生成したggplotオブジェクトにレイヤーオブジェクトを組み合わせていくことで図の描画を行う.各レイヤーオブジェクトはそれぞれ図における以下の構成要素を表現する.
- Geoms
- Statistics
- Scales
- Coordinate systems
- Faceting
- Position adjustments
ここの詳細についてはTsukuba.R#9の発表で話ができればと思う.
以下にレイヤーを使った場合の例を示す.
> ggplot(diamonds, aes(x = carat, y = price)) + geom_point(aes(colour = clarity)) + scale_x_log10() + scale_y_log10()
> ggplot(diamonds, aes(x = depth)) + geom_histogram(binwidth = 0.2) + xlim(55, 70) + facet_wrap(~ cut)
qplot関数の時と全く同じ図を描画している.データから生成したggplotオブジェクトに対してレイヤーオブジェクトを追加していくことで図を作成しているのが上の例から分かると思う.
また,以下のようにggplotオブジェクトを変数に格納してからレイヤーを追加していき,グラフを少しずつ作り上げていくこともできる.
> d <- ggplot(diamonds, aes(x = depth)) > d <- d + geom_histogram(binwidth = 0.2) > print(d) > d <- d + xlim(55, 70) > print(d) > d <- d + facet_wrap(~ cut) > print(d)
レイヤーオブジェクトを生成する関数の名前はグラフの構成要素を直接表しており,各関数には一貫した命名規則(geom_Aやscale_A_Bなど)があるので覚えやすい.また,構成要素の一部を変更してグラフを少しだけ修正するといったことも手軽に行える.しかし,コードが比較的冗長になってしまう傾向があるため,簡単な図を描画する場合はqplot関数の方が扱いやすいだろう.
以上
ggplot2で図を描画するには,手軽に使えるqplot関数を使う方法と,レイヤーオブジェクトを重ね合わせていく方法の2つがある.それぞれ一長一短なので,うまく使い分けていくといいだろう.
参考資料
- ggplot2
- 本家.各リソースへのリンクやリファレンスあり.
- 一粒で3回おいしいggplot2 - Slideshare
- id:syou6162のTsukuba.R#6の発表資料.
- http://blip.tv/file/3362248
- ggplot2作者による講義の録画.