【R言語で描く美麗グラフ】ggplot2で学ぶ、洗練されたデータ可視化術 ✨

R

はじめに:Rのグラフ、もっと美しくしませんか?

R言語でplot()関数を使ってグラフを作成したとき、「なんだか少し古い感じがする…」「もっと直感的に、分かりやすく洗練されたグラフを作りたい!」と感じたことはありませんか?データの洞察を効果的に伝えるためには、グラフの「見た目」と「分かりやすさ」が非常に重要です。

その悩みを解決するのが、R言語のデータ可視化パッケージの王様、ggplot2 です。

この記事では、ggplot2を使って、美しく、そして情報量の多い「伝わる」グラフを作成するための基本から応用までを、初心者の方にも分かりやすく解説します。あなたのRでのデータ可視化スキルを、一段階上へと引き上げましょう!

1. ggplot2とは?:グラフを「部品」で組み立てる

ggplot2は、単なるグラフ作成パッケージではありません。「Grammar of Graphics(図形の文法)」という考え方に基づいています。これは、グラフを以下の3つの基本的な部品(レイヤー)の組み合わせとして考えるアプローチです。

  1. data: グラフにするデータ(データフレーム)
  2. aes (Aesthetic Mapping): データをグラフのどの視覚的要素(x軸、y軸、色、形、サイズなど)に対応させるかの「マッピング」
  3. geom (Geometric Objects): 実際に描画する図形のタイプ(点、線、棒、箱ひげなど)

この「文法」に従うことで、一貫性のあるルールで、単純なグラフから複雑なグラフまで自由に組み立てることができます。

インストール方法

ggplot2は、データサイエンスに必要なパッケージ群をまとめたtidyverseに含まれています。tidyverseをインストールするのが最も簡単です。

# tidyverseをインストール(ggplot2やdplyrも含まれます)
install.packages("tidyverse")

# ライブラリを読み込む
library(tidyverse)

2. ggplot2で描く、より実践的なグラフ

ggplot2に含まれるサンプルデータセットmpg(自動車の燃費に関するデータ)を使って、見栄え良く、分かりやすいグラフを作成するテクニックを紹介します。

散布図と傾向線: geom_point() + geom_smooth()

2つの連続変数の関係性と、データ全体のトレンドを同時に可視化します。

library(ggplot2)

ggplot(data = mpg, aes(x = displ, y = hwy)) +
  # 点(散布図)を追加。車種(class)で色分け
  geom_point(aes(color = class), size = 3, alpha = 0.6) +
  # 全体の傾向を示す平滑線を追加(se=FALSEで信頼区間の影を非表示に)
  geom_smooth(method = "loess", se = FALSE, color = "navy") +
  labs(
    title = "エンジンの排気量と高速道路での燃費の関係",
    subtitle = "車種別に色分けし、全体の傾向線を追加",
    x = "排気量 (L)",
    y = "高速道路での燃費 (MPG)",
    color = "車種"
  ) +
  theme_minimal() # シンプルなテーマを適用

横向き棒グラフ: geom_col() + coord_flip()

カテゴリ別の数値を比較する場合、項目が多いと縦の棒グラフではラベルが重なってしまいます。横向きにすることで、各項目をすっきりと見せることができます。

ここでは、dplyrで車種ごとの平均燃費を計算し、燃費が良い順に並べてグラフ化します。

library(tidyverse)

# 車種ごとの平均高速道路燃費を計算し、良い順に並べ替え
mpg_summary <- mpg %>%
  group_by(class) %>%
  summarise(avg_hwy = mean(hwy)) %>%
  arrange(avg_hwy)

ggplot(data = mpg_summary, aes(x = reorder(class, avg_hwy), y = avg_hwy)) +
  # reorder()で、avg_hwyの値に基づいてclassの順序を並べ替え
  geom_col(aes(fill = class), show.legend = FALSE) +
  coord_flip() + # グラフを横向きにする
  labs(
    title = "車種ごとの平均高速道路燃費",
    subtitle = "燃費の良い順にソート",
    x = "車種",
    y = "平均燃費 (MPG)"
  ) +
  theme_minimal()

横向き箱ひげ図: geom_boxplot() + coord_flip()

データのばらつきをカテゴリ別に比較する場合も、横向きにすると見やすくなります。中央値(median)を基準に並べ替えることで、より直感的な比較が可能です。

library(ggplot2)

ggplot(data = mpg, aes(x = reorder(class, hwy, FUN = median), y = hwy)) +
  # reorder()で、hwyの中央値(median)に基づいてclassの順序を並べ替え
  geom_boxplot(aes(fill = class), show.legend = FALSE) +
  coord_flip() + # グラフを横向きにする
  labs(
    title = "車種ごとの高速道路燃費の分布",
    subtitle = "中央値が高い順にソート",
    x = "車種",
    y = "高速道路での燃費 (MPG)"
  ) +
  theme_minimal()

3. グラフの保存:ggsave()

作成したグラフは、ggsave()関数を使うことで、PNG, PDF, SVGなど様々な形式で保存できます。解像度やサイズの指定も簡単です。

library(ggplot2)

# グラフを作成して、変数pに格納する
p <- ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point(aes(color = class)) +
  labs(title = "燃費の散布図") +
  theme_bw()

# ggsave()でファイルに保存
# width, heightの単位はインチ。dpiは解像度(dots per inch)
ggsave("highway_mileage_scatter.png", plot = p, width = 8, height = 6, dpi = 300)

ggsave()は、最後に表示したグラフを自動で保存する機能もありますが、変数に格納してから保存する方が確実です。

まとめ:ggplot2でデータにストーリーを語らせよう!

ggplot2は、単にグラフを描くだけでなく、データが持つストーリーを視覚的に、そして美しく表現するための強力なツールです。coord_flip()reorder()といった関数を組み合わせることで、より分かりやすく洗練されたグラフを効率的に作成できます。

ぜひ、このパッケージを使いこなし、あなたのデータ分析を次のレベルへと進めてください!

コメント