Rのステキグラフィックスライブラリ「ggplot2」のqplot関数についてまとめてみた.少し頑張りすぎた.
qplot関数とは
ggplot2にはqplot(Quick PLOTの略)というステキな関数が用意されている.これを使うと,デフォルトの設定のままでもRのbaseライブラリ(plot関数など)と比べてきれいな図が描ける上に,色付けや凡例の設定もある程度よしなにやってくれる.
以降,ggplot2のqplot関数について詳しく見ていくことにしよう.
この記事の構成
最初に,qplot関数について以下のことをチェックする.
- qplot関数の基本
- qplot関数のdataパラメータ
次に,以下のグラフについてbaseライブラリとggplot2のqplot関数の間でシンタックスの違いや描画されるグラフを比較していく.
- 散布図
- 折れ線グラフ
- 棒グラフ
- ヒストグラム
- 密度プロット
- 箱ひげ図
- 条件付きプロット
最後にbaseライブラリの低水準作図関数とggplot2のレイヤーの対応関係を確認する.
- 低水準作図関数とレイヤー
また,この記事ではggplot2パッケージ付属のdiamondsデータとeconomicsデータをサンプルとして使っていく.
> 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) > head(economics) date pce pop psavert uempmed unemploy 1 1967-06-30 507.8 198712 9.8 4.5 2944 2 1967-07-31 510.9 198911 9.8 4.7 2945 3 1967-08-31 516.7 199113 9.0 4.6 2958 4 1967-09-30 513.3 199311 9.8 4.9 3143 5 1967-10-31 518.5 199498 9.7 4.7 3066 6 1967-11-30 526.2 199657 9.4 4.8 3018 > dim(economics) [1] 478 6
各サンプルデータの詳細についてはヘルプを参照.
> ?diamonds > ?economics
qplot関数の基本
qplot関数はbaseライブラリのplot関数のような感覚で使うことができる.
> qplot(carat, price, data = diamonds, colour = clarity)
色とデータの対応付けや軸のラベルなどはqplot関数がよしなにやってくれる.
> qplot(carat, data = diamonds, geom = "density", colour = cut)
わーお,きれいな図.
(TODO:色などの指定方法について書く)
qplot関数のdataパラメータ
Rで作図する際に,描画対象のデータがデータフレームであるケースはかなり多い.データフレームの各列は$を使うことで簡単にアクセスできる.
> 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 > head(diamonds$price) [1] 326 326 327 334 335 336
しかし,データフレームの列をdiamonds$〜のように指定しつつqplot関数でグラフを作ろうとすると,以下のようにコードが冗長になり,自動的につけられた軸のラベルや凡例に"diamonds$"がついて煩わしくなるといった問題が発生する.
> qplot(diamonds$carat, diamonds$price, colour = diamonds$clarity)
qplot関数のdataパラメータを使うと,以下のようにデータフレームの列の名前だけでプロットするデータを指定できるようになる.こうすることで出来上がった図のラベルや凡例もすっきりする.
> qplot(carat, price, data = diamonds, colour = clarity)
qplot関数でデータフレームをグラフ化する場合は,dataパラメータを積極的に使っていくようにした方がいいだろう.
散布図
以降,様々な図についてbaseライブラリとqplot関数の具体例を確認しながら比較していこう.
散布図はデータを点で平面上にプロットするだけの基本的な図だ.
plot(x, y) # base qplot(x, y) # ggplot2
具体例.
> plot(diamonds$carat, diamonds$price) > qplot(carat, price, data = diamonds)
折れ線グラフ
折れ線グラフは時系列データの可視化の際によく使われる.
plot(x, y, type = "l") # base qplot(x, y, geom = "line") # ggplot2
具体例.
> plot(economics$date, economics$unemploy, type = "l") > qplot(date, unemploy, data = economics, geom = "line")
棒グラフ
おなじみの棒グラフ.
barplot(x) # base qplot(names(x), x, geom = "bar", stat = "identity") # ggplot2
値の頻度を棒グラフで表示する場合は以下の通り.
barplot(table(x)) # base qplot(x, geom = "bar") # ggplot2
xが離散値の場合,qplot関数のgeom = "bar"は省略できる.
具体例.
> table(diamonds$color) D E F G H I J 6775 9797 9542 11292 8304 5422 2808 > barplot(table(diamonds$color)) > qplot(color, data = diamonds)
ヒストグラム
データの度数分布を可視化する図.
hist(x) # base qplot(x, geom = "histogram") # ggplot2
hist関数はbinsで,qplot関数はbinwidthでヒストグラムの幅を調節できる.
hist(x, bins = 100) qplot(x, geom = "histogram", binwidth = 1)
xが連続値の場合,qplot関数のgeom = "histogram"は省略できる.
具体例.
> hist(diamonds$price) > qplot(price, data = diamonds)
密度プロット
ヒストグラムと同じくデータの分布を示す図.こちらはカーネル密度推定を使っている.
plot(density(x)) # base qplot(x, geom = "density") # ggplot2
具体例.
> plot(density(diamonds$price)) > qplot(price, data = diamonds, geom = "density")
箱ひげ図
複数のデータの分布を比較するのに便利な図.
boxplot(y ~ x) # base qplot(x, y, geom = "boxplot") # ggplot2
具体例.
> boxplot(diamonds$carat ~ diamonds$cut) > qplot(cut, carat, data = diamonds, geom = "boxplot")
低水準作図関数とレイヤー
Rのbaseライブラリの低水準作図関数はそれぞれ以下のggplot2のレイヤーと対応している.
base functions | ggplot2 layers |
---|---|
curve() | geom_curve() |
hline() | geom_hline() |
lines() | geom_line() |
points() | geom_point() |
polygon() | geom_polygon() |
rect() | geom_rect() |
rug() | geom_rug() |
segments() | geom_segment() |
text() | geom_text() |
vline() | geom_vline() |
abline(lm(y ~ x)) | geom_smooth(method = "lm") |
lines(density(x)) | geom_density() |
lines(loess(x, y)) | geom_smooth() |
Rのbaseの低水準作図関数は,先にplot関数でグラフを描画してから実行することでグラフ上に図形を追加する.
plot(x, y) lines(x, y)
qplot関数の場合は,以下のようにqplot()の戻り値に対してレイヤーを追加することで描画できる.
qplot(x, y) + geom_line()
以上
qplot関数を使うとデフォルトのままでもbaseライブラリよりもきれいなグラフが描ける.qplot関数+レイヤーという具合にインターフェイスに一貫性がある点も重要なポイントだ(barplotやhistのような他の関数を呼び出す必要がほとんどない).
まだggplot2を触ったことがない人は是非次回Rを使う時に試してみよう.
参考資料
- ggplot. had.co.nz
- 本家.各リソースへのリンクやリファレンスあり.
- ggplot2 book
- ggplot2本の2章(qplot)とAppeldixのPDFがダウンロードできる.
- Visualising data with R - had - blip.tv
- ggplot2作者による講義の録画.