第3章ではggplot2を使ったグラフの作り方を紹介しています。


【3-1】ExcelにはないRでグラフを作るメリットと特徴

【3-2】ggplot2でグラフを作る流れを説明します

【3-3】Rのggplot2で散布図を作るgeom_point関数


今回はヒストグラムを紹介します。


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/heights.csv?raw=true"
dat <- read.csv(url)




2.ヒストグラムとは?

ヒストグラムはデータの分布を確認することができます。

スクリーンショット 2019-07-12 15.00.10
まず1本1本の縦棒のことを"bin"といいます。
これをみると身長140台〜190台の分布で、170cm付近が一番多そうです。
ただ170cmを中心にすると左右対称ではない印象を受けます。



ヒストグラムを見ることでわかることの例

分布がどうなっているか?

分布には正規分布やポワソン分布など様々な分布があります
正規分布かどうかを確認するときにはヒストグラムで直接データを確認することが必要です。
他にも対数正規分布やポワソン分布など色々な分布があります。


外れ値がないか?

とんでもないところにデータがあれば、それが偶然飛び抜けたデータなのか入力ミスなのか確認することをおすすめします。

カテゴリーごとの分布がわかる

もし山が2つある分布だったとします。
その場合、もしかしたら2つ以上の別のグループが潜んでいるかもしれません。
各グループに分けるとそれぞれのグループで正規分布になっているかもしれません。

また各グループごとの比較をするときにも使えます。
下は同じデータですが棒グラフとヒストグラム、どちらが見やすいでしょうか?

スクリーンショット 2019-07-12 15.57.34




2.ヒストグラムの基本的な作り方

ggplot2でヒストグラムを作る時にはgeom_histogram関数を使います。
ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), bins = 30, data = dat)


スクリーンショット 2019-07-12 17.55.09

ヒストグラムのy軸は個数なので指定の必要がありません。

3.bins, binwidthについて

ヒストグラムはbin1つの幅を指定する必要があります。
幅を変えると見え方が変わります。

bins = binの数を指定する
binwidth = binの幅を指定する

何も指定しないと自動的にbins = 30としてグラフを作ります。


スクリーンショット 2019-07-12 14.58.43
binsの数を減らすと1つの幅が広くなることがわかります。


スクリーンショット 2019-07-12 14.58.48
binwidthを増やすと1本の幅が広くなっているのがわかります。

どのbins(またはbinwidth)がいいかは数字を変えグラフをみて傾向を探りながら見つけてみてください。


4.線の色を赤にする

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), color = "red", bins = 30, data = dat)

binの周りの線の色を変えるにはcolor="○○"で指定します。
代表的な色なら"red"などが使えますが、color = "#FFFFFF"のような指定もできます。


スクリーンショット 2019-07-12 14.58.26


5.binの色を赤にする

binの中の色を変えるにはfillを使います。

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), fill = "red", bins = 30, data = dat)
スクリーンショット 2019-07-12 14.58.30

6.alpha = ○○でfillの色を薄くする

ここで周りの線の色を黒にした上で、fillの色を薄くします。
色を薄くするときはalpha = ○○で色を薄くすることができます。
alphaは0〜1の値を入力します。

ggplot()+
theme_gray(base_family = "HiraKakuPro-W3")+
geom_histogram(aes(x = 身長), color = "black", fill = "red", alpha = 0.5, bins = 30, data = dat)

スクリーンショット 2019-07-12 14.59.10



7.グループごとで色分けする

グループごとに色分けするときはaes()の中にfill = グループの列名を入れます。

aes関数に関しては前回の記事のでも説明していますので気になる方はをご参照ください。

fillでグループ分けするときはpositionを指定する必要があります。

①position = "stack" 重ねずに積み上げる
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "stack", alpha = 0.7,  data = dat)

②position = "nudge" 色を重ねる
色を重ねるときはalpha = で透過率を上げる必要があります。
ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "nudge", alpha = 0.7,  data = dat)

スクリーンショット 2019-07-12 20.40.41

スクリーンショット 2019-07-12 14.59.28


8.応用編(グループ毎に別のグラフにする)

スクリーンショット 2019-07-13 7.53.20

最後にこのグラフのようにグループ毎にグラフを作る方法を紹介します。

グループ毎にグラフを作るときは主に①facet_grid、②facet_wrapの2つがありますが今回はfacet_gridを紹介します。

facet_grid(縦 ~ 横)という表記をします。

ggplot()+
  theme_gray(base_family = "HiraKakuPro-W3")+
  geom_histogram(aes(x = 身長, fill = 性別), bins = 30, position = "nudge", alpha = 1,  data = dat)+
  facet_grid(性別 ~ .)

スクリーンショット 2019-07-13 18.59.42

縦に並べるか横に並べるかですが、次の考え方が参考になります。

水平方向の変化を見るグラフは垂直方向、垂直方向の変化を見るグラフは水平方向

今回のヒストグラムは水平方向の変化なので縦に並べる方が比較しやすいことがわかります。


9.まとめ

今回はヒストグラムの基本的な作り方を紹介しました。

最初に「左右対称ではない?」と書きましたが、男性と女性の2つの分布が重なっていることが原因だとわかります。ちなみにこのデータは男性が173±10cm(130人)、女性が157cm±5cm(70人)を組み合わせたデータでした。

統計になれないとExcelで表を作り平均と標準偏差だけ計算して比較したくなりますが、分析する前に分布を確認する習慣のきっかけになれば幸いです。