本日の目標

  1. ggplot2 の基本的な考え方(レイヤー構造)を理解する
  2. 散布図・ヒストグラム・棒グラフを作成できる
  3. aes() による変数のマッピングを理解する

1. ggplot2とは

ggplot2 は,Rで最も広く使われているグラフ作成パッケージです。

ggplot2の特徴

  • 文法に基づいたグラフ作成(Grammar of Graphics)
  • レイヤーを重ねてグラフを組み立てる
  • 美しいデフォルトデザイン
  • 高度なカスタマイズが可能
# tidyverse を読み込む(ggplot2が含まれる)
library(tidyverse)

2. ggplot2の基本構造

レイヤー構造

ggplot2では,グラフをレイヤー(層)を重ねるように作ります。

ggplot(data = データ, aes(x = x軸の変数, y = y軸の変数)) +
  geom_xxx()   # グラフの種類を指定
要素 説明
ggplot() キャンバスを準備する
aes() 変数とグラフ要素のマッピングを指定
geom_xxx() グラフの種類(散布図・棒グラフなど)

3. 練習用データの準備

今日は R に最初から入っているデータセット iris を使います。

# データの確認
head(iris)      # 最初の6行を表示
# データの概要
str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# 基本統計量
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  
##                 
##                 
## 

iris データの説明:アヤメ(花)の測定データ - Sepal.Length:がく片の長さ - Sepal.Width:がく片の幅 - Petal.Length:花びらの長さ - Petal.Width:花びらの幅 - Species:種(setosa / versicolor / virginica)


4. 散布図(Scatter Plot)

ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length)) +
  geom_point()

色で種類を区別する

ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
  geom_point()


5. ヒストグラム(Histogram)

ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_histogram()

ビンの幅を調整する

ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_histogram(binwidth = 0.3, fill = "steelblue", color = "white")


6. 棒グラフ(Bar Plot)

種ごとのデータ件数を棒グラフで表示します。

ggplot(data = iris, aes(x = Species)) +
  geom_bar()

色を付ける

ggplot(data = iris, aes(x = Species, fill = Species)) +
  geom_bar()


7. 箱ひげ図(Box Plot)

グループ間の分布を比較するのに便利です。

ggplot(data = iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot()


8. タイトルと軸ラベルの追加

ggplot(data = iris, aes(x = Sepal.Length, y = Petal.Length, color = Species)) +
  geom_point() +
  labs(
    title = "がく片の長さと花びらの長さの関係",
    x = "がく片の長さ (cm)",
    y = "花びらの長さ (cm)",
    color = "種"
  )


9. aes() のよく使うマッピング

引数 役割
x x軸の変数 x = Sepal.Length
y y軸の変数 y = Petal.Length
color 色(線・点) color = Species
fill 塗りつぶし色 fill = Species
size 点・線の大きさ size = Petal.Width
shape 点の形 shape = Species

演習

演習1:散布図

iris データを使って,Petal.Length(x軸)と Petal.Width(y軸)の 散布図を作成し,Species で色分けしてください。

ggplot(data = iris, aes(x = ___, y = ___, color = ___)) +
  geom_point()

演習2:ヒストグラム

Petal.Width のヒストグラムを作成し,適切なタイトルと軸ラベルを付けてください。

ggplot(data = iris, aes(x = ___)) +
  geom_histogram(binwidth = ___, fill = "___", color = "white") +
  labs(title = "___", x = "___", y = "___")

演習3:箱ひげ図

種(Species)ごとに Petal.Length の分布を箱ひげ図で比較してください。 fill = Species を追加してカラフルにしてみましょう。

ggplot(data = iris, aes(x = ___, y = ___, fill = ___)) +
  geom_boxplot() +
  labs(title = "___")

本日のまとめ

  • ggplot2 はレイヤーを重ねてグラフを作る
  • ggplot() + aes() + geom_xxx() が基本の構造
  • 散布図(geom_point()),ヒストグラム(geom_histogram()),棒グラフ(geom_bar()),箱ひげ図(geom_boxplot())を作れるようになった
  • labs() でタイトル・軸ラベルを追加できる

宿題・予習

  • 今日作ったグラフをスクリプトファイルに保存しておく
  • 次回は グラフのカスタマイズと保存 を学びます
  • 教科書の可視化に関する章を読んでおくと理解が深まります