ggplot2 はデータの可視化を行うパッケージであり、 ggplot2 のグラフの仕上がりは、R の標準関数に比べてきれい。 基本的にデータフレーム(または tibble)に保存されたデータに対して、 x 軸と y 軸となる列名を指定するだけで、簡単できれいなグラフが描けるため、様々な場面で使わる。
ggplot2 デフォルトでもきれいなグラフを描くことができるが、 ggplot2 向けに作られた拡張機能を使うことで、さらにきれいなグラフを作成できる。 グラフ全体のスタイル構成(テーマ)を提供しているパッケージとして ggthemes が知られている。 グラフを描くときの点や線の色パターン(カラーパレット)を提供しているパッケージとして、 RColorBrewer や ggsci などが知られている。 また、ggpubr および gridExtra パッケージは複数の ggplot グラフを 1 つの画面で表示させるためのパッケージである。 これらのパッケージを予めインストールしておくとよい。
install.packages('ggthemes')
install.packages('RColorBrewer')
install.packages('ggsci')
install.packages('ggpubr')
install.packages('gridExtra)
ggplot2 でグラフを描くとき、基本的に次のような手順を踏む。
ggplot
関数で描画レイヤーを用意する。この際に、aes
オプションで x 軸、y 軸、色情報などを指定する。geom_point
、geom_line
などの関数を使用してグラフを描く。xlab
、ylab
、xlim
、ylim
、theme
などの関数でグラフの軸座標やカラースタイルを調整する。ggplot2 の基本的な関数の概略は RStudio ウェブサイトで公開されている ggplot2 cheatsheet で確認できる。
(ggplot2 パッケージを含む)tidyverse パッケージおよび グラフのテーマやカラーパレットなどを指定するためのパッケージも合わせて呼び出して準備する。
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.3 ✓ dplyr 1.0.1
## ✓ tidyr 1.1.1 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggthemes)
library(ggsci)
library(ggpubr)
library(ggExtra)
geom_point
関数は散布図を描く関数である。 ここでは、rice.txt データセットを使ってグラフを描く例を示す。 rice データセットには 7 つの列があり、 それぞれの列が標本の個体番号(replicate)、ブロック番号(block)、 根部乾燥重量(root_dry_mass)、地上部乾燥重量(shoot_dry_mass)、 系統処理(trt)、処理(fert)、系統(variety)からなる。
d <- read_tsv('data/rice.txt')
## Parsed with column specification:
## cols(
## replicate = col_double(),
## block = col_double(),
## root_dry_mass = col_double(),
## shoot_dry_mass = col_double(),
## trt = col_character(),
## fert = col_character(),
## variety = col_character()
## )
head(d)
## # A tibble: 6 x 7
## replicate block root_dry_mass shoot_dry_mass trt fert variety
## <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
## 1 1 1 56 132 F10 F10 wt
## 2 2 1 66 120 F10 F10 wt
## 3 3 1 40 108 F10 F10 wt
## 4 4 1 43 134 F10 F10 wt
## 5 5 1 55 119 F10 F10 wt
## 6 6 1 66 125 F10 F10 wt
簡単な散布図として、各個体の根部乾燥重量(root_dry_mass)を x 軸とし、 地上部乾燥重量(shoot_dry_mass)を y 軸としてグラフを描く例を示す。 x 座標および y 座標の情報は ggplot
関数の中の aes
関数の中で指定する。 指定方法として、データフレーム d
の中で x 座標にしたい列の列名(root_dry_mass
)を x
オプションに、 y 座標にしたい列名(shoot_dry_mass
)を y
オプションに指定する。
p <- ggplot(d, aes(x = root_dry_mass, y = shoot_dry_mass)) +
geom_point()
print(p)
上で描いた散布図に wt 系統と ANU843 系統の 2 つの系統のデータが含まれている。 両方とも黒の点として描かれ、区別できない。 そこで、この散布図に対して、系統ごとに点の色を塗り分けて wt 系統と ANU843 系統を区別できるようにする。 色を指定するときは、aes
関数の color
オプションを使う。 系統ごと(variety 列にある値に基づいて)色を塗り分けたいので、 ここでは color
オプションに系統を表す列名 variety を指定する。
p <- ggplot(d, aes(x = root_dry_mass, y = shoot_dry_mass, color = variety)) +
geom_point()
print(p)
rice データは、各系統(variety)に対して 3 つの処理(fert)が行われている。 具体的に言えば、wt 系統には F10 処理、NH4Cl 処理、NH4NO3 処理がある。 また、ANU843 系統にも同様に F10 処理、NH4Cl 処理、NH4NO3 処理がある。 系統と処理の違いがわかるように点の色を塗り分けたい場合は、 variety 列と fert 列の組み合わせ(interaction)に対して色を付ければよい。 そのためには、aes
関数の color
オプションに interaction(variety, fert)
を代入する。 なお、variety 列のラベルと fert 列のラベルの組み合わせを作るとき、 両方のラベルを結合するときの区切り文字として ’ / ’ を使うことにする。
p <- ggplot(d, aes(x = root_dry_mass, y = shoot_dry_mass,
color = interaction(variety, fert, sep = ' / '))) +
geom_point()
print(p)
各系統を点の色で区別し、各処理を点の形で区別することもできる。 点の形を指定するオプションとして shape
があるので、 このオプションに各処理のラベルが含まれている列名(fert)を指定する。
p <- ggplot(d, aes(x = root_dry_mass, y = shoot_dry_mass, color = variety, shape = fert)) +
geom_point()
print(p)