geom_density

  1. geom_densityの基本的な使い方
  2. 複数の密度曲線
  3. ヒストグラムと一緒に使う方法

geom_densityの基本的な使い方

次は、乱数で正規分布に従うサンプルデータを生成して、密度曲線を描く例。

library(ggplot2)

# ggplot用データフレームを用意(サンプルデータを作成)
df <- data.frame(value = rnorm(1000, 1, 1))
head(df)
##        value
## 1 -0.3904148
## 2  1.3788577
## 3  1.0617106
## 4  1.2977758
## 5 -0.8127540
## 6  1.5101867


# 描画キャンパスを用意
g <- ggplot(
  df,
  aes(
    x = value
  )
)
g <- g + geom_density()
plot(g)
ggplot密度曲線

複数の密度曲線を描く方法

複数の密度曲線を重ねて描く方法。

library(reshape2)
library(ggplot2)

# サンプルデータを生成します
data <- data.frame(
          A = rnorm(1000, 30, 5),
          B = rnorm(1000, 25, 5),
          C = rnorm(1000, 40, 5)
        )
head(data)
##          A        B        C
## 1 24.66517 24.19001 42.21240
## 2 27.65490 19.87710 45.10529
## 3 32.61436 17.59847 36.82782
## 4 32.47883 28.35064 41.88873
## 5 25.35230 25.90155 36.90881
## 6 35.09300 28.38090 33.70297


# データを ggplot 用に変換
df <- melt(data) 
head(df)
##   variable    value
## 1        A 24.66517
## 2        A 27.65490
## 3        A 32.61436
## 4        A 32.47883
## 5        A 25.35230
## 6        A 35.09300


g <- ggplot(
  df,
  aes (
    x = value,            # xで数値データを指定
    colour = variable     # カテゴリーごとで色分け
  )
)
g <- g + geom_density(
  stat = "density",
  position = "identity"
)

plot(g)
ggplot2で描く複数の密度曲線

曲線だけでなく、線の下側を色で塗りつぶす場合は fill オプションを付ける。

g <- ggplot(
  df,
  aes (
    x = value,           # x で数値データを指定
    colour = variable,   # 線の色を、カテゴリーごとで色分け
    fill = variable      # 線の下側をカテゴリーごとで色分け
  )
)
g <- g + geom_density(
  stat = "density",
  position = "identity",
  alpha = 0.5            # 透明度を50%にして、重なっている部分を見やすくします
)

plot(g)
ggplot2で描く複数の密度曲線

ヒストグラム上に密度曲線を描画する方法

ヒストグラムの上に密度曲線を描く例。ヒストグラムは geom_istogram 関数を利用する。

library(reshape2)
library(ggplot2)

# サンプルデータを生成
data <- data.frame(
          A = rnorm(1000, 30, 5),
          B = rnorm(1000, 25, 5),
          C = rnorm(1000, 40, 5)
        )
df <- melt(data) 


g <- ggplot(
  df,
  aes (
    x = value,
    y = ..density..,       # 縦軸を明示的に密度を指定
    colour = variable,
    fill = variable
  )
)
g <- g + geom_histogram(   # ヒストグラム
  position = "identity",
  alpha = 0.5
)
g <- g + geom_density(     # 密度曲線
  stat = "density",
  position = "identity",
  alpha = 0
)

plot(g)
ggplot2で描く複数の密度曲線とヒストグラム