前回、Rのggplot2を使ってグラフを作成する基本を紹介しました。

今回は散布図を作り方を紹介します。
併せてggplot2を使うのに必要なaes関数にも慣れていきたいと思います。

1.データの読み込み

今回もggplotパッケージが含まれているtidyverseパッケージを読み込みます。
#tidyverseパッケージを読み込みます。
if(!require(tidyverse)) install.packages("tidyverse", repos = "http://cran.us.r-project.org")

#既にtidyverseパッケージをインストールしている方は以下でもOK
library(tidyverse)

#データ取り込みます。今回はdatという変数にデータを入れます
url <- "https://github.com/mitti1210/myblog/blob/master/data01.csv?raw=true"
dat <- read.csv(url)


データを確認します。最初の数行を確認するのはhead関数を使います
head(dat)

歩行(0:非自立、1:自立)と氏名、性別、年齢、身長、体重、SIAS(脳卒中の評価)、BBS(バランスの評価)、MMSE(認知機能の評価)が入っています(架空のデータです)。




2.散布図の基本的な作り方

散布図を作るにはgeom_point関数を使います。

スクリーンショット 2019-05-23 0.07.49


今回はp1という変数名に横軸に身長、縦軸に体重の散布図を作成します。
またtheme〜というのはMacで日本語が□□と文字化けしないようにフォントを指定しています。
Windowsではなくて大丈夫(なはず)です。

p1 <- 
  dat %>%
  ggplot()+
    theme_gray(base_family = "HiraKakuPro-W3")+
    geom_point(aes(x = 身長, y = 体重))
p1
もしくは
p1 <- 
  ggplot()+
    theme_gray(base_family = "HiraKakuPro-W3")+
    geom_point(aes(x = 身長, y = 体重), data = dat)
p1

スクリーンショット 2019-05-23 0.30.30


基本はこれで完成です。ただもっと形を変えてみます。

点の色を赤にしてみる

色を変えるにはcolor =○○を使います。
主要な色であれば"red"や"blue"など色名を""で囲みます。
"#00BFC4"などRGBで指定することもできます。

p2 <- 
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重), color = "red",  data = dat)
p2

スクリーンショット 2019-05-23 0.32.14


点の色を性別で分けてみる

男女別に色分けもできます。
p3 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別), data = dat)
p3

スクリーンショット 2019-05-23 0.33.39


p2とp3の違いがわかるでしょうか?

スクリーンショット 2019-05-23 0.43.27


ここでaes関数に関してもう少し詳しく説明します。


aes関数について

aes関数はデータフレームの変数名グラフに指定する場合に使います
x軸やy軸はイメージしやすいですが色・形・サイズなどに関しては①変数名の値を使いたければaes関数に入れる②変数名を使わず自分で値を指定したい場合はaes関数に入れないとなります。

スクリーンショット 2019-05-23 0.53.37


これを応用するともっとグラフを変えることができます。


点の大きさを変える。形も変える。

点の大きさはsizeで、形はshapeで指定します。

shapeは番号によって形が選べます。

スクリーンショット 2019-05-22 20.29.48


p4 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別), size = 3, shape = 3, data = dat)
p4

スクリーンショット 2019-05-23 0.57.45


形を歩行の値で変更する

shapeをaes関数に入れてみます。

p5 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = 歩行), size = 3, data = dat)
p5

エラー: A continuous variable can not be mapped to shape

あれっ?エラーが出ました。連続変数はshapeには使えませんよと怒られました

これは歩行が0,1で今のところ連続変数だからです。
確かに上のshapeの番号で1.5といった番号はエラーが出そうです。
なのでこのグラフの中だけ歩行をカテゴリー変数に変えます。factor関数を使います。

p5 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = factor(歩行)), size = 3, data = dat)
p5

スクリーンショット 2019-05-23 0.59.20


これでエラーが消えました。ただ凡例がfactor(歩行)なんてなってしまいました。

凡例の名前だけでなく、軸やタイトルの名前を変えてみます。
名前を変えるのはlabs関数です。

p6 <-
  ggplot() +
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 身長, y = 体重, color = 性別, shape = factor(歩行)), size = 3, data = dat)+
  labs(x = "身長", y = "体重", color = "性別", shape = "歩行", title = "散布図", caption = "これは仮想のデータです")
p6
スクリーンショット 2019-05-23 1.01.39
これで変わりました。


横軸がカテゴリー変数の場合

横軸がカテゴリー変数でも散布図は使えます。

p7 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 性別, y = 身長), data = dat)
p7

スクリーンショット 2019-05-23 1.08.50


ただ重なってよくわかりません。このように縦軸や横軸にカテゴリー変数を使う場合は点の位置をずらすとわかりやすくなります。

点を重ならないようにずらすのは2つの方法があります。

①geom_point関数の中でposition = "jitter"を追加する

p8 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_point(aes(x = 性別, y = 身長), position = "jitter", data = dat)
p8

スクリーンショット 2019-05-23 1.09.56


②geom_jitter関数を使う
p9 <- 
  ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+ 
  geom_jitter(aes(x = 性別, y = 身長, color = 性別), data = dat)
p9

スクリーンショット 2019-05-23 1.10.04

これで男女の分布の違いが見やすくなりました。



まとめ

今回は散布図について紹介しました。
Rを使った散布図はxとyの値を変えるだけで作れますし、colorやshapeを使うことで更に情報を付け加えることができます。

今回のデータセットは他にも変数があるのでぜひ他の散布図も作成してみてください。