ggplot2によるデータ可視化

Kanazawa.R #1

伊東宏樹

2024-06-29

[CC-BY-SA]

内容

  • ggplot2パッケージの紹介

  • ggplot2でグラフを描く

Rのグラフィック環境

よく使われるのは2つ

  • baseグラフィックス

  • ggplot2

その他、plotlyとかも

ggplot2パッケージ

gg = Grammar of Graphics

統一された文法でグラフを描くことができる

インストール

ふつうにCRANからインストール(RStudioではTools > Install Packages… でも)

install.packages("ggplot2")

使い方

まずはライブラリをよびだす

library(ggplot2)

データ

3種のアヤメの花の形態データ(萼の長さ・幅、花弁の長さ・幅)

data(iris)
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

ggplot関数

ggplot関数だけで、空のグラフを作成

グラフを描きたいデータフレームをdata引数として与える

ggplot(data = iris)

ggplot関数

データのマッピング

mapping引数にaes関数を指定して (aes = aesthetic mappings)、どの軸にどの変数を割り当てるかを決める

ggplot(data = iris,
       mapping = aes(x = Sepal.Width, y = Sepal.Length))

データのマッピング

geom_pointで散布図グラフ

“+”演算子で要素を加えていく

geom_* = geometric object: データの描画方法を指定するレイヤー

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

geom_pointで散布図グラフ

こうしても同じ

geom_*関数の方でmapping引数を指定することもできる(実はdata引数も)

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

こうしても同じ

種ごとに色分け

aes関数のcolour引数(colorでも可)にSpeciesを指定すると、Speciesの種類ごとに点の色が変わる

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species))

種ごとに色分け

形を変える

shape引数にSpeciesを指定すると、Speciesの種類ごとに点の形が変わる

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species))

形を変える

サイズを変える

size引数に倍率を指定(aes関数の外で)

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             size = 3)

サイズを変える

点を半透明に

alpha(不透明度)を指定すると、点を半透明にできる

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             alpha = 0.7, size = 3)

点を半透明に

配色を変える

scale_colour_manual関数で色を直接指定できる

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             alpha = 0.7, size = 3) +
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#D55E00"))

配色を変える

軸ラベルの設定

labs関数でラベルを指定できる

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             alpha = 0.7, size = 3) +
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#D55E00")) +
  labs(x = "Sepal width (cm)", y = "Sepal length (cm)")

軸ラベルの設定

グラフをオブジェクトに代入

p <- ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             alpha = 0.7, size = 3) +
  scale_colour_manual(values = c("#E69F00", "#56B4E9", "#D55E00")) +
  labs(x = "Sepal width (mm)", y = "Sepal length (mm)")

plotで表示(printでも可)

plot(p)

グラフをオブジェクトに代入

テーマを変える

theme_*関数でテーマを切り替えられる

p +
  theme_classic()

テーマを変える

別のテーマ

p +
  theme_bw()

別のテーマ

さらに別のテーマ

ggthemesパッケージにいろいろなテーマあり

library(ggthemes)
ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species), size = 3) +
  labs(x = "Sepal width (mm)", y = "Sepal length (mm)") +
  scale_color_excel() + theme_excel()

さらに別のテーマ

回帰直線を加える

ggplot(iris, aes(x = Sepal.Width, y = Sepal.Length)) +
  geom_point(aes(colour = Species, shape = Species),
             alpha = 0.7, size = 3) +
  geom_smooth(formula = y ~ x, aes(colour = Species), method = lm) +
  labs(x = "Sepal width (mm)", y = "Sepal length (mm)")

回帰直線を加える

グラフを保存する

ggsave関数でグラフをファイルに保存できる

ggsave(filename = file.path("figures", "plot.png"),
       device = png, width = 12, height = 8, units = "cm")

デフォルトでは直前に表示したグラフ

ファイル形式はPNGのほか、TIFF, BMP, PDF, SVGなど

オブジェクトに代入しておいたグラフの保存もできる

ggsave(filename = file.path("figures", "plot2.png"),
       plot = p,
       device = png, width = 12, height = 8, units = "cm")

別の種類のグラフ

  • geom_line: 折れ線グラフ

  • geom_boxplot: 箱ヒゲ図

  • geom_histogram: ヒストグラム

  • geom_bar: 棒グラフ

  • などなど

さらに知るには

データ分析のためのデータ可視化入門

キーラン・ヒーリー 著 瓜生真也・江口哲史・三村喬生 訳, 講談社

ggplot2: Elegant Graphics for Data Analysis (3rd ed)

Hadley Wickham, Danielle Navarro, and Thomas Lin Pedersen 著

オンライン版は無料