ggplot2の基本から知りたい!
すぐに綺麗なグラフを書きたい!
という人向けに、ggplot2の使い方を基本からまとめてみました。
Rに入っているデータを使って説明しているので、初心者の方でもすぐにコピペで実践することができますよ!
Rのggplot2パッケージとは
ggplot2は、グラフを書いてデータを可視化するためのR言語のパッケージです。
プログラミングでグラフ作成!?
と思うかもしれませんが、慣れてしまえばエクセルよりも簡単で綺麗なグラフを作ることができるので、ぜひとも習得したいツールです。
一度ggplot2で綺麗なグラフを書くと、エクセルにはもう戻れません。面倒ですもの。。
ggplot2パッケージのインストール
ggplot2パッケージはtidyverseパッケージ群のひとつです。
よって、tidyverseパッケージをインストール&ロードすれば使うことができます。
# tidyverseをインストール(済んでいる人はスルーしてください)
install.packages("tidyverse")
# tidyverseをロード
library(tidyverse)
tidyverseパッケージはggplot2によるグラフ化だけでなく、データの前処理や分析に必要な関数を一挙に集めたパッケージで、Rユーザーにとって最高のパッケージの一つだと思います!そのため、インストールして損はありません。
Rのオススメ本
tidyverseパッケージを使ったオススメの実践入門書を紹介します。データの前処理や分析、可視化(ggplot2)が学べるのでとてもオススメ!
Rを使ってもっとデータ分析をしてみたい!と思わせてくれる一冊です。
ggplot2によるグラフ描画の考え方(イメージ)
ggplot2では、キャンバスの上にグラフをレイヤー(層)のように重ねていくイメージで作図していきます。具体的にいうと、
- ggplot()関数でグラフのキャンバスを用意
- geom_point()関数で散布図を作成し、①に重ねる
- geom_smooth()で回帰直線を作成し、②に重ねる
といったように、一番初めに用意したキャンバスの上に、散布図や回帰直線などのレイヤーをどんどん追加して重ねていくことでグラフを完成させていきます。
ggplot2の基本コマンド
ggplot2でグラフを書くための基本コマンドは以下の通りです。
ggplot(data = データセット名,
mapping = aes(x = x軸にしたい変数,
y = y軸にしたい変数))+
geom_point()など、各グラフレイヤーごとのコマンド
追加したいレイヤのコードを、+で繋げてレイヤーを追記していくだけなのでとても簡単にグラフを書くことができます。
実際にggplot2を使ってグラフを作成してみよう!
では、実際にグラフを書いてみましょう。
ggplot2パッケージに入っているmpgデータセットを用いて書いていきます。
なお、mpgデータセットは"1999年から2008年までの人気車種38車種の燃費データ"のデータセットです。
以下 のhead(mpg, 3)のコードをコピペして実行(command + Enter またはcontrol + Enter)すると、誰でも使えますのでぜひ一緒に実践してみてください。
# mpgデータセットの上から3行を表示する
head(mpg, 3)
> head(mpg, 3)
# A tibble: 3 × 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2 2008 4 manual(m6) f 20 31 p compact
本記事では、実行するコードは黒字、Rから返されるコードは青色で表示しています!
では、実際にコードを使って、
1. キャンバスの準備
2. 散布図の作成
3. 回帰直線の追加
4. グラフのテーマ変更
まで順番にやっていきます。
1. キャンバスの準備
キャンバスを準備するには、ggplot()関数を使います。
ggplot2を使ってデータを可視化する場合は、必ずggplot()から始まります。
# キャンバス用意し、オブジェクトgとして保存
g <- ggplot()
#gを表示する
g
2. 散布図の作成
前述の通りmpgデータセットを使って、xがdispl(排気量)、yがhwy(燃費)の散布図を作成します。
散布図はgeom_point()で作成します。
先ほど用意したキャンバス(g)の上に重ねるので、g + geom_point()と書いていきます。
# gに散布図レイヤーを追加し、オブジェクトg2として保存
g2 <-
g + geom_point(data = mpg, # mpgデータセットの
mapping = aes(x = displ, y = hwy)) # xがdispl、yがhwyの散布図を書く
# g2を表示
g2
3. 回帰直線の追加
次に、回帰直線を追加します。
回帰直線はstat_smooth()を使って作成します。
g2の上に重ねるので、g2 + stat_smooth()と書いていきます。
# g2の上に回帰直線を描き、オブジェクトg3として保存
g3 <-
g2 + stat_smooth(data = mpg, # mpgデータセットの
mapping = aes(x = displ, y = hwy), # xがdispl、yがhwyの回帰直線を書く
method = "lm") # 一般線形モデルで
#g3を表示
g3
4. グラフのテーマ(theme)を変更する
g3までで散布図と回帰直線ができたので、仕上げとしてグラフのテーマを変えます。
論文でよく使われるtheme_classic()に変えてみましょう。
g3の上に重ねるので、g3 + theme_classic()と書いていきます。
# g3のグラフのテーマをclassicに変更し、オブジェクトg4として保存
g4 <-
g3 + theme_classic()
#g4を表示
g4
できましたね!
今回はレイヤーごとにオブジェクトをg, g2, g3, g4と分けて書きましたが、全行程をつなげると以下のようになります。
# g〜g4の工程をつなげた場合
g5 <-
ggplot()+ #キャンバスの準備
geom_point(data = mpg, #散布図レイヤーを追加
mapping = aes(x = displ, y = hwy))+
stat_smooth(data = mpg, #回帰直線レイヤーを追加
mapping = aes(x = displ, y = hwy),
method = "lm")+
theme_classic() # テーマを変更
g5
上に重ねるレイヤーを+で追加していくだけなので、とてもシンプル!
しかしながら、上記のコードの場合、mapping = aes(x = displ, y = hwy))が2回もあって入力が面倒です。
ggplot2では、コードを省略して書くことができます。
ggplot2におけるコードの省略・簡略化について
一番初めのggplot()の中に、使うデータセットとマッピングする変数を指定してあげることでコードを簡略化できます。
具体的にどういうことかというと、次の通りです。
# コードの簡略化(1) ggplot()の中で可視化するデータを指定
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy))+
geom_point()+
stat_smooth(method = "lm")
ggplot()の中で指定されたデータはその後追加されるレイヤーでも引き継がれるため省略することができるのです!
dataやmappingなどの引数名も省略できる!
また、data やmappingといった引数名や、xとyも省略することができます。
そのため、先ほどのg5のコードは以下のコードまで簡略化することができます。
# コードの簡略化(2) 引数名も省略して超簡略化。
ggplot(mpg,
aes(displ, hwy))+
geom_point()+
stat_smooth(method = "lm")
xとyも省略できるので、一番省略されると上記のコードになります。
私はaesの中身は明らかにしておきたいので以下のように書くことが多いです。これは完全に好みです。
# 私の好み
ggplot(mpg,
aes(x = displ, y = hwy))+
geom_point()+
stat_smooth(method = "lm")
もしかするとこれが一般的だったりするのかな?身近にRユーザーがいないのでわかりません!
ggplot2でいろいろなグラフを書く
(棒グラフ、箱ひげ図、ヒストグラム、折れ線グラフ)
先ほどの散布図だけでなく、ggplot2では棒グラフや箱ひげ図、ヒストグラムなどさまざまなグラフを簡単に書くことができます。
- geom_point():散布図(前述)
- geom_bar():棒グラフ
- geom_boxplot():箱ひげグラフ
- geom_histogram():ヒストグラム
- geom_line():折れ線グラフ
ここでは代表例を紹介します。
散布図 - geom_point() -
前述の通り、散布図はgeom_point()を使います。
mpgデータセットのdispl(排気量)と燃費(cty)の関係について散布図でみてみましょう。
# xが排気量displ、yが燃費ctyの散布図
ggplot(mpg,
aes(x = displ,
y = cty))+
geom_point()
ggplot2を使った散布図の作り方の詳細は以下をご参考にしてください。
棒グラフ - geom_bar() -
棒グラフを作成する時はgeom_bar()を使います。
mpgデータセットで、class(車種)ごとのデータ個数を棒グラフでみてみましょう。
# 車種(class)ごとのデータ個数を棒グラフで表示
ggplot(mpg,
aes(x = class))+
geom_bar()
ggplot2を使った棒グラフの作り方の詳細は以下をご参考にしてください。
箱ひげ図 - geom_boxplot() -
エクセルで面倒な箱ひげグラフも、Rなら簡単に作成できます!
箱ひげ図を作る時は、geom_boxplot()を使います。
mpgデータセットのclass(車種)ごとのdispl(排気量)を箱ひげ図でみてみましょう。
# 車種(class)ごとの排気量(displ)の箱ひげ図
ggplot(mpg,
aes(x = class,
y = displ))+
geom_boxplot()
ggplot2を使った箱ひげ図の作り方の詳細は以下をご参考にしてください。
ヒストグラム - geom_histogram() -
ヒストグラムを書く場合はgeom_histogram()を使います。
mpgデータセットのdispl(排気量)のヒストグラムを見てみます。
# 排気量(displays)のヒストグラム
ggplot(mpg,
aes(x = displ))+
geom_histogram()
折れ線グラフ - geom_line() -
折れ線グラフはgeom_line()を使います。
ここでは、ggplot2パッケージに入っているeconomicsというデータセットを使用して、date(期間)に対するunemploy(失業者)の推移のグラフを見てみます。
# 期間(date)に対する失業者(umemploy)の推移
ggplot(economics,
aes(x = date,
y = unemploy))+
geom_line()
まとめ:Rのggplot2の使い方はとってもシンプル!
ここまででRのggplot2の使い方や、作成できるグラフ例について紹介しました。
基本的にggplot()の後に描画したいレイヤーを+で繋いでいくだけなので、シンプルにグラフを書くことができます。
引き続きggplot2の使い方を知りたい方は、グラフの体裁の整え方をご確認ください!
R言語の勉強におすすめの本
今後Rの勉強をしていきたい!という方に、こちらの参考書がおすすめです。
特に、RユーザのためのRStudio実践入門は、tidyverseパッケージに特化して書かれていてとても実用的でしたのでオススメです。私自身、この本を読んでRで出来ることが一気に増えた実感のある本です。kindleで試し読みもできるのでぜひ参考にしてください。