9  データ可視化入門 - ggplot2基礎

データを数値で見ることも大切ですが、グラフやチャートで視覚化することで、データの特徴やパターンがより明確になります。

Rのggplot2パッケージは、美しく柔軟性の高いグラフを作成するための強力なツールです。この章では、ggplot2の基本を学び、基本的なグラフが作成できるようになります。

9.1 学習内容

この章を読み終えると、以下ができるようになります。

  • ggplot2の基本的な文法を理解する
  • 散布図を作成する
  • 折れ線グラフを作成する
  • 棒グラフを作成する
  • ヒストグラムを作成する
  • グラフにタイトルやラベルを追加する

9.2 ggplot2とは

ggplot2は、「Grammar of Graphics」(グラフィックスの文法)という考え方に基づいたパッケージです。

グラフを「データ」「視覚的要素(点、線など)」「座標系」などの部品を組み合わせて作ることで、柔軟で一貫性のある可視化が可能になります。

9.2.1 パッケージの準備

# tidyverseに含まれています
library(tidyverse)

# またはggplot2だけを読み込む
library(ggplot2)

9.3 ggplot2の基本構造

ggplot2でグラフを作る際の基本的な構造は以下の通りです。

ggplot(data = データ, aes(x = x軸の変数, y = y軸の変数)) +
  geom_点や線の種類()
  • ggplot(): グラフの土台を作る
  • aes(): Aesthetics(美的要素)の略。どの変数をx軸・y軸などに割り当てるかを指定
  • geom_*(): Geometry(幾何要素)の略。点、線、棒などの表現方法を指定

重要なのは+でレイヤーを重ねていくという考え方です。

9.4 散布図(Scatter Plot)

2つの連続変数の関係を見るには散布図が適しています。

9.4.1 基本的な散布図

library(tidyverse)
data(iris)

# がく片の長さと幅の関係を散布図で表示
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point()

9.4.2 点の大きさや色を変更

# 点を大きく、赤色に
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point(size = 3, color = "red")

9.4.3 透明度の調整

点が重なっている場合、透明度を調整すると見やすくなります。

# 透明度を設定(0が完全透明、1が不透明)
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point(size = 3, alpha = 0.5)

9.4.4 カテゴリごとに色分け

aes()の中でcolorを指定すると、カテゴリごとに自動で色分けされます。

# 品種ごとに色分け
ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7)

9.5 折れ線グラフ(Line Plot)

時系列データや連続的な変化を表現するには折れ線グラフが適しています。

9.5.1 サンプルデータの作成

# 月次売上データを作成
monthly_sales <- data.frame(
= 1:12,
  売上 = c(120, 135, 150, 145, 160, 175, 190, 185, 200, 210, 230, 250)
)

9.5.2 基本的な折れ線グラフ

ggplot(data = monthly_sales, aes(x = 月, y = 売上)) +
  geom_line()

9.5.3 点と線を組み合わせる

ggplot(data = monthly_sales, aes(x = 月, y = 売上)) +
  geom_line(color = "blue", linewidth = 1) +
  geom_point(color = "red", size = 3)

9.6 棒グラフ(Bar Plot)

カテゴリごとの値を比較するには棒グラフが適しています。

9.6.1 カウント数の棒グラフ

geom_bar()は自動的にカウントを計算します。

# 品種ごとのデータ数
ggplot(data = iris, aes(x = Species)) +
  geom_bar()

9.6.2 値を直接指定する棒グラフ

既に集計済みのデータの場合はgeom_col()を使います。

# 部署ごとの売上データ
dept_sales <- data.frame(
  部署 = c("営業", "開発", "総務"),
  売上 = c(3500, 2800, 1500)
)

ggplot(data = dept_sales, aes(x = 部署, y = 売上)) +
  geom_col()

9.6.3 棒の色を変更

ggplot(data = dept_sales, aes(x = 部署, y = 売上)) +
  geom_col(fill = "steelblue")

9.6.4 カテゴリごとに色分け

ggplot(data = dept_sales, aes(x = 部署, y = 売上, fill = 部署)) +
  geom_col()

9.7 ヒストグラム(Histogram)

データの分布を確認するにはヒストグラムが適しています。

9.7.1 基本的なヒストグラム

# がく片の長さの分布
ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_histogram()

9.7.2 ビン(区間)の数を調整

# ビンの数を指定
ggplot(data = iris, aes(x = Sepal.Length)) +
  geom_histogram(bins = 20, fill = "lightblue", color = "black")

9.7.3 品種ごとに重ねて表示

ggplot(data = iris, aes(x = Sepal.Length, fill = Species)) +
  geom_histogram(alpha = 0.5, position = "identity", bins = 20)

9.8 タイトルとラベルの追加

labs()関数を使って、グラフにタイトルや軸ラベルを追加できます。

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.7) +
  labs(
    title = "アヤメのがく片の長さと幅",
    subtitle = "品種ごとの比較",
    x = "がく片の長さ (cm)",
    y = "がく片の幅 (cm)",
    color = "品種"
  )

9.9 テーマの変更

ggplot2には様々な組み込みテーマがあります。

9.9.1 theme_minimal()

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3) +
  labs(title = "シンプルなテーマ") +
  theme_minimal()

9.9.2 theme_classic()

ggplot(data = iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3) +
  labs(title = "クラシックなテーマ") +
  theme_classic()

9.9.3 その他のテーマ

  • theme_bw(): 白黒テーマ
  • theme_dark(): 暗いテーマ
  • theme_light(): 明るいテーマ
  • theme_void(): 軸や背景を削除

9.10 実践例:総合的なグラフ作成

これまで学んだ要素を組み合わせて、見やすいグラフを作成してみましょう。

# 売上データの作成
sales_data <- data.frame(
= rep(1:6, times = 2),
  店舗 = rep(c("東京店", "大阪店"), each = 6),
  売上 = c(120, 135, 150, 145, 160, 175,  # 東京店
           100, 115, 130, 140, 155, 170)   # 大阪店
)

# 店舗別の月次売上推移
ggplot(data = sales_data, aes(x = 月, y = 売上, color = 店舗)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3) +
  labs(
    title = "店舗別月次売上推移",
    subtitle = "2025年1月〜6月",
    x = "月",
    y = "売上(万円)",
    color = "店舗名"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 16, face = "bold"),
    legend.position = "top"
  )

9.11 グラフの保存

作成したグラフはggsave()で保存できます。

# 最後に作成したグラフを保存
ggsave("outputs/sales_plot.png", width = 8, height = 6)

# 特定のグラフを保存
my_plot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) +
  geom_point()

ggsave("outputs/iris_plot.png", plot = my_plot, width = 8, height = 6)

9.12 練習問題

irisデータで、Petal.Length(x軸)とPetal.Width(y軸)の散布図を作成してください。点は品種ごとに色分けしてください。

解答例

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

以下のデータで棒グラフを作成し、タイトルと軸ラベルを追加してください。

products <- data.frame(
  商品名 = c("商品A", "商品B", "商品C", "商品D"),
  販売数 = c(150, 230, 180, 210)
)

解答例

ggplot(products, aes(x = 商品名, y = 販売数)) +
  geom_col(fill = "steelblue") +
  labs(
    title = "商品別販売数",
    x = "商品名",
    y = "販売数"
  )

以下のデータで折れ線グラフを作成し、点も一緒に表示してください。

temperature <- data.frame(
  時刻 = c(0, 6, 12, 18, 24),
  気温 = c(15, 12, 20, 18, 14)
)

解答例

ggplot(temperature, aes(x = 時刻, y = 気温)) +
  geom_line(color = "red", linewidth = 1) +
  geom_point(size = 3) +
  labs(
    title = "時刻別気温",
    x = "時刻",
    y = "気温(℃)"
  )

9.13 まとめ

この章では、ggplot2の基本を学びました。

  • ✅ ggplot2の基本構造(ggplot() + aes() + geom_*()
  • ✅ 散布図(geom_point()
  • ✅ 折れ線グラフ(geom_line()
  • ✅ 棒グラフ(geom_bar(), geom_col()
  • ✅ ヒストグラム(geom_histogram()
  • ✅ タイトルとラベルの追加(labs()
  • ✅ テーマの変更(theme_*()

これで基本的なグラフが作成できるようになりました。次の章では、さらに高度なカスタマイズ方法を学びます。

ノート次のステップ

次の章「データ可視化応用 - ggplot2発展」では、以下を学びます。

  • ファセット(複数グラフの並べて表示)
  • 軸のスケール調整
  • より細かいテーマのカスタマイズ
  • 日本語フォントの設定

より洗練されたグラフ作成スキルを身につけましょう。