この広告は、90日以上更新していないブログに表示しています。
Tsukuba.R#9での発表に向けてggplot2の勉強を始めた.これまで調べたことを軽くまとめてみる.
高度な2Dグラフィックの描画について統一的な操作を提供してくれるライブラリ.「The Grammar of Graphics」という思想に基づいていて,ユーザがデータのどの部分に注目したいかを記述していくだけで簡単にきれいなグラフを得られるようになっている.
いつも通り.
> install.packages("ggplot2")
ggplot2で図を描画する方法は主に以下の2通り.
ここでは以下のggplot2パッケージ付属のdiamondsサンプルデータを使い,それぞれの方法でいくつか図を描画してみる.
>library(ggplot2)> head(diamonds) carat cut color clarity depth table price x y z10.23 Ideal E SI261.5553263.953.982.4320.21 Premium E SI159.8613263.893.842.3130.23 Good E VS156.9653274.054.072.3140.29 Premium I VS262.4583344.204.232.6350.31 Good J SI263.3583354.344.352.7560.24 Very Good J VVS262.8573363.943.962.48> dim(diamonds)[1]5394010
このデータの詳細が知りたい場合はヘルプを参照しよう.
> ?diamondsggplot2には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オブジェクトにレイヤーオブジェクトを組み合わせていくことで図の描画を行う.各レイヤーオブジェクトはそれぞれ図における以下の構成要素を表現する.
ここの詳細については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つがある.それぞれ一長一短なので,うまく使い分けていくといいだろう.
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。