2 チュートリアル
2.1 早速手を動かす
まず、データ可視化用のパッケージであるggplot2を読み込んでみよう。パッケージはlibrary(パッケージ名)で読み込むことができる。
library(ggplot2)
# ※シャープ記号より後ろに書かれている内容はただのコメントアウト(=注釈)
# コメントアウトなので何を書いても怒られない
# ハッシュタグではない
# 自分でコードを書くときはメモとして使うようにしようチュートリアル用のデータとして、Rにデフォルトで入っているmtcarsを使うことにする。mtcarsは自動車の燃費などに関するデータである(コンソールに?mtcarsと入力すると詳細なヘルプをみることができる)。では、str(データ)で中身を確認してみよう。
str(mtcars) # 中身を確認## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
11の変数(variable)と32の観測値(observation)が記録されている。32行×11列のスプレッドシートがあるのと同じ状態だと考えてほしい。head(データ)で先頭6行のデータを確認してみよう。
head(mtcars) # 先頭6行を確認##                    mpg cyl disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
## Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
変数は全部で11個あるが、まずは2つの変数に注目してみよう。その変数は、
disp:エンジンの排気量(立方インチ)mpg:燃費(マイル/ガロン)
である。
素朴に思いつくのは、「排気量と燃費の相関関係はどうなっているか?」というものだろう。排気量と燃費はそれぞれ連続変数(continuous variable:量的変数、quantitative variableとも言う)なので、ここは散布図を描くのが妥当そうである。
では、ggplot2における可視化を、手順を追って見ていこう。
1. x軸とy軸にどの変数を対応づけたいかを考える
ggplot2でデータを可視化する際、最初に書かなければいけない基本のコードはggplot(data = データ, aes(x = x軸の変数, y = y軸の変数))である。
ggplot(data = mtcars, aes(x = disp, y = mpg))
Figure 2.1: 背景のみのグラフ。
しかし、灰色の背景があるだけでデータはプロットされない。なぜなら、どのようなデザイン2でデータをプロットするかを指示していないからである。つまり、これだけではまだ足りない。
2. どのようなデザインでプロットしたいかを指示する
データをどのようなデザイン(geometry)でプロットしたいかを、geom_xxxx()で指定しなければならない。今回は散布図(データを点としてプロット)なので、geom_point()というコードを使う。
先程のコードに「+」でコードをつなげていくことでプロットできるようになる。
ggplot(data = mtcars, aes(x = disp, y = mpg)) + # コードを読みやすくするため、「+」のところで改行すると良い
  geom_point() # データを点(point)としてデザインするためのコードを追加
Figure 2.2: 散布図。x軸は排気量、y軸は燃費を表している。
完成。基本はこれだけである。
なお、ほとんどのグラフはx軸とy軸から構成されるので、実はコードの中に一々x = dispやy = mpgと書く必要はない。また、データについても自明なので、data = mtcarsと書く必要もない。つまり、上のコードは下のように書くこともできる(これ以降、data, x, yは省略する)。
ggplot(mtcars, aes(disp, mpg)) +
  geom_point()
Figure 2.3: コードは若干違うが、上のFigure 2.2と全く同じ散布図。
3. 変数を色(や形状)に対応づける
もちろん上の図ができた時点でOKだが、これだけではどうも味気ない。では、ここで一歩進んで、もう1つ変数を加えてみよう。その変数とは、
cyl:シリンダーの個数(4, 6, or 8)
である。このとき「シリンダーの個数によって、排気量と燃費の関係は違うのではないか?」ということが思いつく。
それでは、cylによって点の色を変えてみよう。以下のコードを書けばOKである。
ggplot(mtcars, aes(disp, mpg, color = cyl)) + # color = cyl を追加
  geom_point()
Figure 2.4: シリンダーの個数を点の色に対応づけた散布図。
aes()にcolor = cylを追加することで、cylを色に対応づけることができた。
しかし、このグラフは厳密には間違っている。どこが間違っているのだろうか? 少し考えてみてほしい。
答え
図の右側の青いバー(凡例;legend)を見ると、その横にシリンダーの個数が連続変数として1刻みで描かれれている(4,5,6,7,8)。しかし、実際のデータには4,6,8という3種類の値しかない。もちろん個数は連続的なものだが、この場合は離散変数(discrete variable;質的変数、qualitative/categorical/factor variableとも言う)として扱ったほうがデータの表現として妥当だし、見やすくなるだろう3。
この場合、cylをfactor()でくくると解決する。
ggplot(mtcars, aes(disp, mpg, color = factor(cyl))) + # factor(cyl)に変更
  geom_point()
Figure 2.5: シリンダー数を離散変数とした上で色に対応づけた散布図。
Rでは、factor(変数)とすることで、その変数を離散変数として扱うことができるようになる。その結果、凡例の表示も妥当なものとなった。
2.2 まとめ
このように、ggplot2を使うと、数行のコードでそれなりに見栄えの良い図が描けるようになる。
手順をもう一度おさらいしよう。
1. x軸とy軸にどの変数を対応づけたいかを考える
何(y軸)を何(x軸)に応じてプロットしたいかを考えるのが可視化の第一歩である。
これが思いつけば可視化は大体うまくいったようなものである。
2. どのようなデザインでプロットしたいかを指示する
データの性質(特に離散変数か連続変数か)に応じてデザインを決める。
たとえば「x軸が連続変数でy軸が連続変数なら散布図」というように決める。こういうのは大体コンセンサスが取れている4ので、以降の章でそれを学んでいってほしい。
今回は散布図しか描かなかったが、たとえば散布図の上に回帰直線を重ね書きする、というように、複数の表現を組み合わせてプロットすることも可能である。これは追々見ていくことにする。
3. 変数を色(や形状)に対応づける
x軸、y軸以外に追加したい変数がある場合は、色などに対応づける。
まずは基本のプロットができるようになることを目指すので、細かい色の調整方法などは後の方で少しだけ解説する。
下に載せているのはあくまでごく一部だが、ggplot2では以下のデザイン(geom_xxxx())を使うことが多い。
| geom | デザイン | 
|---|---|
| geom_bar() | 棒グラフ | 
| geom_line() | 折れ線グラフ | 
| geom_point() | 散布図、点 | 
| geom_errorbar() | エラーバー | 
| geom_pointrange() | 点+線 | 
| geom_histogram() | ヒストグラム | 
| geom_density() | 密度曲線 | 
| geom_boxplot() | 箱ひげ図 | 
| geom_violin() | バイオリンプロット | 
| geom_area() | 面グラフ | 
| geom_smooth() | 関数のフィッティング | 
| geom_text() | テキスト | 
これもまたごく一部だが、変数はx、y、colorだけでなく、以下の要素(aes())にも対応づけることができる。
| aes() | 要素 | 
|---|---|
| x | x軸 | 
| y | y軸 | 
| color | 枠の色 | 
| fill | 塗りつぶしの色 | 
| linetype | 線の形 | 
| size | 線の太さ、点の大きさ | 
| shape | 点の形 | 
以降の章では、よく用いる可視化のパターンについて見ていくことにする。