geom_point

散布図は、点を描く関数 geom_point を利用して描く。描かれた点の上に geom_smoothgeom_line 関数を利用して回帰線などを付け加えることができる。

散布図と回帰直線

geom_point 関数を利用して散布図を描き、その上に geom_smooth 関数により回帰直線を書き加える。

library(ggplot2)

# 乱数を利用してサンプルデータを作成
x <- sort(runif(1000, 1, 10))
y <- rnorm(1000, 50, 10) * sort(runif(1000,1, 10))

# ggplot に代入するためのデータフレームを作成
df <- data.frame(x=x, y=y)

# 作成したデータフレームを確認
head(df)
##          x        y
## 1 1.017262 49.10280
## 2 1.020018 41.57822
## 3 1.021907 66.32804
## 4 1.037068 60.73542
## 5 1.050855 34.18668
## 6 1.085932 67.09626

# ggplot 描画レイヤーを準備
g <- ggplot(
  df,                       # ggplot 用データフレーム
  aes (
    x = x,                  # x 軸に df$x を指定
    y = y                   # y 軸に df$y を指定
  )
)
g <- g +  geom_point(
  shape = 20,               # プロットのタイプを指定
  size = 0.8,               # プロットのサイズを指定
  na.rm = TRUE              # 非数値を無視
)
g <- g + geom_smooth(       # 近似線
  method = "lm"             # 近似線は回帰法によって求める
)
g <- g + xlab("Label X")    # x 軸ラベル
g <- g + ylab("Label Y")    # y 軸ラベル
g <- g + ggtitle("ggplot2") # グラフタイトル

plot(g)
ggplot2で散布図を描く例、また回帰直線を描き加える例

MA プロット

ggplot を利用して MA プロットを描く例。MA プロットは 2 つの実験群のデータそれぞれの平均を計算し、両者の差(M 値)を縦軸に、両者の平均(A 値)を横軸にプロットした図である。(詳細)。

利用するサンプルデータは RNA-seq の擬似データである。全部で 4000 個の遺伝子発現量を含み、最初の 800 個と後の 3200 個が性質が異なるので、ここでは色を塗り分ける。

library(ggplot2)
library(DESeq)

# データの読み込み
count <- read.table("http://stat.biopapyrus.net/data/count.txt", header = TRUE)
group <- c(1, 1, 1, 2, 2, 2)

# 正規化
cds <- newCountDataSet(count, group)
cds <- estimateSizeFactors(cds)
count <- counts(cds, normalized = TRUE)

# group 1 と group 2 の発現量の平均値を計算
mean.group1 <- log2(rowMeans(count[, group == 1]))
mean.group2 <- log2(rowMeans(count[, group == 2]))

# 各遺伝子に対して、DEG か non-DEG かのラベルをつける
tag <- c(rep("DEG", 800), rep("non-DEG", 3200))

# ggplot 用のデータフレームを作成
df <- data.frame(
    m.values = mean.group2 - mean.group1,
    a.values = (mean.group2 + mean.group1) / 2,
    gene = tag
)

# 描画レイヤーを描く
g <- ggplot(                 # データのセットアップ
    df,                      # データの入っているデータフレーム
    aes(
        x = a.values,        # df の a.values 列を x 座標とする
        y = m.values         # df の m.values 列を y 座標とする
    ) 
)
g <- g + geom_point(         # プロット属性を指定
    aes(colour = gene),      # DEG か non-DEG かで色を塗り分ける
    size = 2,
    pch = 20,
    na.rm = TRUE             # 非数値をプロットしない
)
g <- g + xlab("A-value")     # 横軸ラベル
g <- g + ylab("M-value")     # 縦軸ラベル
g <- g + ggtitle("M-A plot") # グラフタイトル

plot(g)
ggplot2でM-Aプロットを描く例です

平均分散プロット

データの特徴を捉えるとき、平均分散プロットもよく用いられる。横軸を平均値、縦軸を分散としたプロットである。

library(ggplot2)
library(DESeq)

# データの読み込み
count <- read.table("http://stat.biopapyrus.net/data/count.txt", header = TRUE)
group <- c(1, 1, 1, 2, 2, 2)

# 正規化
cds <- newCountDataSet(count, group)
cds <- estimateSizeFactors(cds)
count <- counts(cds, normalized = TRUE)

# データを読み込んで、group 1 と group 2 に分ける
g1 <- count[, group == 1]
g2 <- count[, group == 2]

# group 1 の平均と分散を計算
g1.m <- log2(apply(g1, 1, mean))
g1.v <- log2(apply(g1, 1, var))

# group 2 の平均と分散を計算
g2.m <- log2(apply(g2, 1, mean))
g2.v <- log2(apply(g2, 1, var))

# ggplot 用データフレームを作成
df <- data.frame(
    MEAN = c(g1.m, g2.m),
    VAR = c(g1.v, g2.v)
)

# ggplot の描画レやーを作成
g <- ggplot(
    df,
    aes(                 # 散布図の x, y 座標を指定
        x = MEAN,
        y = VAR
    )
)
g <- g + geom_point(     # 点の属性を指定
    color = "darkgrey",
    size = 2,
    pch = 20,
    na.rm = TRUE
)
g <- g + geom_abline(    # y = x の直線を図に描き入れる
    intercept = 0,
    slope = 1,
    lwd = 1.5,
    col = "orange"
)
g <- g + xlab("MEAN")
g <- g + ylab("VARIANCE")
g <- g + ggtitle("MEAN-VARIANCE plot")

plot(g)
ggplot2でMEAN-VARIANCEプロットを描く例です