ggplot2による可視化

library(tidyverse)

1 ggplot2とは

ggplot2は,Rで最も広く使われている可視化パッケージです.グラフィックの文法(Grammar of Graphics)に基づいて,データ,座標軸,幾何学的オブジェクト(点,線など)を組み合わせてグラフを構築します.

2 ggplot2の基本構造

ggplot2のグラフは,以下の要素を+で重ねて構築します.

  1. ggplot():データとエステティクス(aes)の指定
  2. geom_*():幾何学的オブジェクトの追加
  3. ラベル・テーマ等の調整
wagedata <- read_csv("wage.csv", show_col_types = FALSE)

2.1 散布図

ggplot(wagedata, aes(x = educ, y = wage)) +
  geom_point()

教育年数と賃金の散布図

パイプ演算子を使って書くこともできます.

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point()

3 主なgeom_*()関数

3.1 geom_point():散布図

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point()

散布図

3.2 geom_line():折れ線グラフ

wagedata %>%
  group_by(educ) %>%
  summarize(mean_wage = mean(wage)) %>%
  ggplot(aes(x = educ, y = mean_wage)) +
  geom_line() +
  geom_point()

教育年数ごとの平均賃金

3.3 geom_histogram():ヒストグラム

wagedata %>%
  ggplot(aes(x = wage)) +
  geom_histogram(bins = 30)

賃金のヒストグラム

3.4 geom_bar():棒グラフ

wagedata %>%
  ggplot(aes(x = factor(educ))) +
  geom_bar()

教育年数の分布

3.5 geom_boxplot():箱ひげ図

wagedata %>%
  ggplot(aes(x = factor(educ), y = wage)) +
  geom_boxplot()

教育年数別の賃金の箱ひげ図

3.6 geom_smooth():回帰直線の追加

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point() +
  geom_smooth(method = "lm")

散布図と回帰直線

method = "lm"を指定すると線形回帰の直線が描かれます.指定しない場合はLOESS曲線が描かれます.

3.7 geom_hline()geom_vline():水平線・垂直線

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point() +
  geom_hline(yintercept = mean(wagedata$wage), linetype = "dashed", color = "red")

平均賃金を示す水平線

4 エステティクス(aes)

aes()の中で,データの変数を色,大きさ,形状などの視覚的属性に対応づけることができます.

4.1 色分け

wagedata %>%
  mutate(college = ifelse(educ >= 16, "大卒以上", "大卒未満")) %>%
  ggplot(aes(x = exper, y = wage, color = college)) +
  geom_point()

教育年数による色分け

4.2 ファセット

facet_wrap()を使うと,グループごとにパネルを分けて描画できます.

wagedata %>%
  mutate(college = ifelse(educ >= 16, "大卒以上", "大卒未満")) %>%
  ggplot(aes(x = exper, y = wage)) +
  geom_point() +
  facet_wrap(~ college)

教育水準ごとのパネル

5 軸ラベルとタイトル

xlab()ylab()ggtitle()で軸ラベルやタイトルを設定します.labs()を使えば一括で指定できます.

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point() +
  labs(
    x = "教育年数",
    y = "賃金",
    title = "教育年数と賃金の関係"
  )

ラベルとタイトルの設定

6 表示範囲の設定

coord_cartesian()を使うと,グラフの表示範囲を変更できます.

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point() +
  coord_cartesian(xlim = c(10, 18), ylim = c(0, 1500))

表示範囲の変更

7 テーマ

ggplot2にはいくつかの組み込みテーマがあります.

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  geom_point() +
  theme_minimal()

theme_minimal()の例

主なテーマにはtheme_gray()(デフォルト),theme_bw()theme_minimal()theme_classic()などがあります.

8 stat_summary():要約統計量の可視化

stat_summary()を使うと,グループごとの要約統計量を直接グラフに描くことができます.

wagedata %>%
  ggplot(aes(x = educ, y = wage)) +
  stat_summary(geom = "point", fun = "mean") +
  stat_summary(geom = "line", fun = "mean")

教育年数ごとの平均賃金(点と線)

9 グラフの保存

ggsave()関数でグラフをファイルに保存できます.

p <- ggplot(wagedata, aes(x = educ, y = wage)) +
  geom_point()

ggsave("scatter.png", plot = p, width = 6, height = 4)