library(ggplot2)
library(dplyr)
この記事はR Advent Calender 2014@Qiita1日目の記事「このパッケージがすごい2014」の一部です
ggplot2パッケージはRのグラフィックスに特化したパッケージです。開発者は「神」ことHadley Wickhamさんです。
Rユーザーの中では、グラフィックスにlatticeパッケージを利用するかggplot2を利用するかという論争があったりなかったり。どちらも一長一短、覚えるのに少し手間がかかりますが、今年一年(実際にはここ数ヶ月)ggplot2と向き合った結果、ggplot2 > latticeという形になりました(宗教上の理由でもある)。
今年5月にはバージョン0.9から1.0になりました。バンザイ
ggplot2は「The Grammar of Graphics」という本の概念に基づきます。グラフィックスの文法と呼ばれる表記方法を用いることにより、より読みやすい・見栄えの良いグラフを作成します。
ggplot2パッケージ内のグラフィックス描画関数はqplot関数とggplot関数があります。qplotはQuick plotという説明文とおり、データをすばやく描画するのに向いています。なおかつ、Rの標準描画関数plotに近い処理ができるので直感的に理解しやすいです。対してggplotはggplot2のメイン関数であり、他の関数と組み合わせることで複雑で協力なな描画が可能になります。
ggplot2ではこの2つの描画関数がプロットオブジェクトとして扱われるため、再帰的に呼び出すことが可能です。また、一度作成したプロットオブジェクトにグラフィックスパラメータを付け加えていくことが基本となります。
以下にirisデータを使った例を示します。
data(iris)
head(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
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
summary(iris)## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
ggplot2ではプロットする際に使用するデータをdata引数により明示的に示します(どのように示すかではなく、何を示したいか、という考えがggplot2では大事)。
上の例ではiris.plotというプロットオブジェクトに代入しましたが、一度作成したプロットオブジェクトをもとに拡張してみましょう。種ごとに別々に示す例です(ファセット)。
上の図では、color引数でirisデータのSpeciesごとに色を変更するようにしました。では次にプロットの大きさと形を変更します。
プロットの大きさを変更する引数はsize、形の変更はshape引数で行います。色と形の変更は、カテゴリー変数であれば自動的に行ってくれます。
ここまでは散布図の例でしたが、散布図以外のプロットを行いたい場合にはgeom引数で表示形式を変更できます。箱ひげ図で種ごとの萼片長さを出力します。
qplot以上に複雑で柔軟性のある描画を可能にするのがggplot関数です。ggplot関数はグラフ描画の過程をいくつかの部品として分割し、レイヤー(部品)を重ねることで目的のプロットを行います。
ggplot(
mapping = aes(
x = Sepal.Width, y = Sepal.Length, color = Species),
data = iris)
ggplot関数では、qplot関数のようにデータとグラフに示す変数を指定しただけではプロットできません。まずはgeom_ではじまるレイヤー関数を指定し、プロットの形を決定します。ここでは上の例と同じく、散布図を作成します。
ggplot(
mapping = aes(
x = Sepal.Width, y = Sepal.Length, color = Species),
data = iris) +
geom_point()
geom_pointのほかに、geom_bar、geom_boxplotなどがあります。
つぎはプロットにy = ax + bの回帰直線を加えてみます。ggplot関数もプロットオブジェクトとして扱われるので、一度iris.plotというオブジェクトとして保存します。
filter(iris, Species == "setosa") %>%
ggplot(
mapping = aes(
x = Sepal.Width, y = Sepal.Length),
data = .) -> iris.plot
ggplot2ではtheme関数によりプロットの際のテーマがいくつか用意されています。初期設定では灰色の地なので少し変更してみます。
ggplot(data = iris,
aes(x= Sepal.Width, y = Sepal.Length, color = Species)) +
geom_point() +
theme_classic() +
theme_bw(base_size = 12)
ggthemrパッケージはggplot2のテーマを拡張するためのパッケージです