ヒストグラム

ヒストグラムは量的データの分布を視覚的に認識するために用いられる。度数分布図などとも言われる。ヒストグラムをプロットする関数として histtruehist がよく使われる。

  1. hist 関数の基本的な使い方
  2. 横幅を調整する方法
  3. 縦軸の調整(縦軸の密度表示など)
  4. 密度曲線とラグプロットを追加
  5. 複数のヒストグラムを描く方法
  6. truehist 関数の使い方
  7. 目盛りの異なる 2 つのヒストグラムを描く方法

hist 関数の基本的な使い方

基本的な方法

hist 関数を利用して、特にオプションなどを付けずにヒストグラムを描く例。

# ベクトル型のデータを生成します。
x <- rnorm(1000)

# オプションなしで描きます(左の図)。
hist(x)

# ヒストグラムを塗りつぶします(右の図)。
hist(x, col = "orange", main = "rnorm")
Rのhistで描いたヒストグラム

横幅を調整する方法

ヒストグラムの横幅はデフォルトでは Sturges アルゴリズムによって決められる。横幅を変更する場合は、breaks オプションに分割数、横幅のサイズ、あるいはアルゴリズムを指定する。アルゴリズムを指定するとき、Sturges Scott FD Freedman-Diacoins のいずれかを与える。

x <- rnorm(1000)

# ヒストグラムを10本に等幅で分割します(左の図)。
hist(x, breaks = 10)

# ヒストグラムを、範囲を指定して分割します(真ん中の図)。
hist(x, breaks = c(-5,0, 1, 2, 3, 4, 5))

# ヒストグラムの幅をアルゴリズムで判断し、最適な幅で分割します(右の図)。
hist(x, breaks = "Scott")
Rのhistで描いたヒストグラム,ヒストグラムの横幅を調整する例

縦軸の調整

縦軸は頻度と確率の 2 種類を指定できる。freq オプションで指定する。

x <- rnorm(1000)

# 縦軸を確率に指定します(左の図)。
hist(x, freq = FALSE)

# 縦軸を頻度に指定します(右の図)。
hist(x, freq = TRUE)
Rのhistで描いたヒストグラム,縦軸を頻度あるいは回数を指定する例

密度表示

ヒストグラムの上に密度関数をプロットしたり、ラグプロットを描き加えたりすることができる。

x <- c(rnorm(1000), rnorm(1000, 3, 2))

# 密度関数
hist(x, freq = FALSE)
lines(density(x), col = "orange", lwd = 2)

# 密度関数とラグプロット
hist(x, freq = FALSE)
lines(density(x), col = "orange", lwd = 2)
rug(x)
Rのhistで描いたヒストグラム,密度関数を書き入れる

複数のヒストグラムを描く方法

2 つのヒストグラムを重ねることができる。この際、ヒストグラムの塗り色を透明化させることで、重なりの部分も見やすくなる。

透明色は #ff00ff40 などのように、RGB に透明度を加える。#0000ff の場合は R = 0%、G = 0%、B = 100% であるから、青色を表す。最後の 2 文字は透明度を表す。

x <- rnorm(1000, 10, 5)
y <- rnorm(1000, 15, 5)

hist(x, col = "#ff00ff40", border = "#ff00ff", breaks = 20)
hist(y, col = "#0000ff40", border = "#0000ff", breaks = 20, add = TRUE)
Rのhistで描いたヒストグラム,密度関数を書き入れる

truehist

truehist は MASS パッケージに含まれているヒストグラムを描く関数である。使い方は hist 関数に似ているが、オプションが多く、より細かい設定ができる。

library(MASS)

x <- rnorm(1000)

# 幅が 0.1、縦軸が出現頻度のヒストグラム、すべての面積を足すと 1 になりる(左の図)。
truehist(x, h = 0.1, prob = TRUE, col = "black")

# 横幅が不等分割し、縦軸が頻度のヒストグラムの例(右の図)。
truehist(x, breaks = c(round(min(x) - 0.5), 0, 1:round(max(x) + 0.5)), prob = FALSE, col = "white")

※ min、max はそれぞれ最小値、最大値を求める関数である。round は四捨五入を行う関数である。また、truehist のデフォルトのグラフ色はシアンであるが、ここでは black と white に書き換えたる。

Rのtruehistを利用して描いたヒストグラムの例

目盛りの異なる 2 つのヒストグラムを描く方法

truehist 関数あるいは hist 関数を利用するとき、axes = FALSE と指定することで、軸座標を一時的に描かないようにできる。これを利用すれば、メモリの異なる縦軸の座標を複数付けることができる。以下の例では x 軸を固定して、2 つのヒストグラムを描いた。

library(MASS)

par(mar = c(4.5, 4.5, 4.5, 5.5))

x <- rnorm(1000, 300, 100)
y <- rnorm(1000, 500, 200)

truehist(x, xlim = c(0, 1000), h = 10, col = "#ff990080", border = "#ff990080",
         axes = FALSE, xlab = "", ylab = "")
axis(side = 1)                                          # x 軸
axis(side = 2, col.axis = "#ff9900", col = "#ff9900")   # 左の y 軸
mtext("Orange", side = 2, line = 3)                     # 「side = 2」:左、「line = 3」:y 軸から距離 3 だけ離してテキストを書き入れる

par(new = TRUE)

truehist(y, xlim = c(0, 1000), h = 10, col = "#66990080", border = "#66990080",
         axes = FALSE, xlab = "", ylab = "")
axis(side = 4, col.axis = "#669900", col = "#669900")   # 右の y 軸
mtext("Green", side = 4, line = 3)                      # 「side = 4」:右
Rのtruehistを利用して描いたヒストグラムの例