散布図

散布図は points 関数を利用する。その他に plot 関数、smoothScatter 関数などを利用しても描ける。

points 関数を利用した散布図

points 関数を利用して散布図を描く簡単な例。

x1 <- rnorm(6000, 10, 2)       # Group 1 の x 座標
y1 <- rnorm(6000, 15, 4)       # Group 1 の y 座標
x2 <- rnorm(4000, 20, 3)       # Group 2 の x 座標
y2 <- rnorm(4000, 25, 4)       # Group 2 の y 座標

# x, y 軸やラベルなどを書く(点は後で描く)
plot(0, 0, type = "n", xlim = c(0, max(x1, x2)), ylim = c(0, max(y1, y2)),xlab = "x", ylab = "y")

# 点を描く
points(x1, y1, col = "darkgrey", pch = 1)
points(x2, y2, col = "orange", pch = 3)

# 凡例
legend("bottomright", legend = c("Group 1", "Group 2"), pch = c(1, 3), col = c("darkgrey", "orange"))
points関数で描いた散布図

サンプルデータ(rat.food.txt)を利用して、データをグラフ上にプロットする例。サンプルデータは、ラットに 3 種類の餌(PF、C、G)を与え、7 日間の体重を測ったものである。それぞれの餌群には 5 個体が存在する。

# データの読み込み
x <- read.table("https://stats.biopapyrus.jp/data/", header = TRUE)

xaxis <- 1:ncol(x[, -1])              # x 軸座標を設定します
cols <- c("red", "blue", "green")     # PF 群を赤色、C 群を青色、G 群を緑色

# 空白の図を用意
plot(0, 0, type = "n", xlim = range(xaxis), ylim = range(x[, -1]),
     xlab = "Date", ylab = "Weight")

# 各個体のデータを丸としてプロット
type <- unique(x[, 1])                # 餌の種類を取得
for (i in 1:nrow(x)) {
  points(xaxis, x[i, -1], col = cols[c(1:length(cols))[type == x[i, 1]]], pch = 1)
}

# 凡例
legend("topleft", legend = type, pch = 1, col = cols)
lines関数による折れ線グラフ

濃淡図の描き方

透明度を指定して描く場合

濃淡図を描く場合、点の色に透明率を付ける。点の数が多いとき、時間がかかる。

x1 <- rnorm(6000, 10, 2)
y1 <- rnorm(6000, 15, 4)
x2 <- rnorm(4000, 20, 3)
y2 <- rnorm(4000, 25, 4)

# x, y 軸やラベルなどを描く
plot(0, 0, type = "n", xlim = c(0, max(x1, x2)), ylim = c(0, max(y1, y2)),xlab = "x", ylab = "y")

# 点を描く
points(x1, y1, col = "#30303020", pch = 1)   #灰色(#303030), 透明度32%(16進数では20)
points(x2, y2, col = "#ff990020", pch = 3)   #オレンジ色(#ff9900), 透明度32%

# 凡例(凡例は透明度を付けない方が見やすい)
legend("bottomright", legend = c("Group 1", "Group 2"), pch = c(1, 3), col = c("#303030", "#ff9900"))
points関数で描いた濃淡図

グラデーションをつける場合

グラデーションをつける場合は densCols 関数を利用する。

x1 <- rnorm(6000, 10, 2)
y1 <- rnorm(6000, 15, 4)
x2 <- rnorm(4000, 20, 3)
y2 <- rnorm(4000, 25, 4)

# グラデーションを作成する
col1 <- densCols(x1, y1, colramp = colorRampPalette(c("white", "darkgrey")))
col2 <- densCols(x2, y2, colramp = colorRampPalette(c("white", "orange", "red")))

# x, y 軸やラベルなどを描く
plot(0, 0, type = "n", xlim = c(0, max(x1, x2)), ylim = c(0, max(y1, y2)),xlab = "x", ylab = "y")

# 点を描く
points(x1, y1, col = col1, pch = 1)   #灰色(#303030), 透明度32%(16進数では20)
points(x2, y2, col = col2, pch = 3)   #オレンジ色(#ff9900), 透明度32%

# 凡例
legend("bottomright", legend = c("Group 1", "Group 2"), pch = c(1, 3), col = c("darkgrey", "orange"))
points関数で描いた濃淡図

プロットマーカー(点の種類)

プロットマーカーの指定は pch で行う。プロットマーカーは 20 種類以上用意されている。

pchのパラメーターとその表示
par(mar = c(1, 1, 1, 1))
par(omr = c(1, 1, 1, 1))
plot(0, 0, type = "n", xlim = c(0, 11), ylim = c(0, 8), axes = F, xlab = "", ylab = "")

for (i in 1:10) points(i, 7, cex = 3, pch = i)
for (i in 1:10) text(i, 8, i)

for (i in 1:10) points(i, 4, cex = 3, pch = i+10)
for (i in 1:10) text(i, 5, i + 10)

for (i in 1:10) points(i, 1, cex = 3, pch = i+20)
for (i in 1:10) text(i, 2, i + 20)

プロットマーカーを文字で代用することもできる。

plot(c(0, 0), xlim = c(0, 5), ylim = c(0, 6), type = "n")
x <- c(1, 2, 3, 4, 5)
y1 <- c(2, 4, 4, 5, 6)
y2 <- c(5, 2, 2, 4, 1)
y3 <- c(1, 1, 3, 2, 1)

#プロットマーカーの指定
lines(x, y1, col = "red")
points(x, y1, pch = 1, cex = 2, col = "red")

#プロットマーカーの部分を x の値で代用
lines(x, y2, col = "blue")
points(x, y2, pch = as.character(x), cex = 2, col = "blue")

#プロットマーカー部分を文字列で代用
lines(x, y3, col = "green")
points(x, y3, pch = c("a", "b", "c", "d", "e"), cex = 2, col = "green")
プロットマーカーに文字を利用する

smoothScatter

濃淡図を描く際に smoothScatter 関数も利用できる。

x <- c(rnorm(6000, 10, 2), rnorm(4000, 20, 3))
y <- c(rnorm(3000, 15, 4), rnorm(7000, 25, 4))

# 濃淡色の散布図を描きます。
smoothScatter(
  x,                  # x座標
  y,                  # y座標
  bandwidth = 1,      # 座標点のぼかし
  pch = 1,            # 座標のマーカー
  col = "red",        # 座標の色
  colramp = colorRampPalette(c("white", "orange", "red"))   # 濃淡のグラデーション(淡い所を白、濃い所を赤とします)
)
smoothscatterで描いた濃淡の散布図