Google
WWWを検索
サイト内を検索

stripchartで一次元散布図を描くことができ、同一の群の中が幾つかに分かれているような事がないかの確認をしつつ、boxplotよりも直感的に群間比較を行えます。

早速、irisデータセットをプロットしてみましょう。

stripchart(Sepal.Length ~ Species, iris)

味気の無い図ができました。

1 縦横を入れ替え

stripchart(Sepal.Length ~ Species, iris, vertical = TRUE)

2 ポインターの形状変更

ポインターの形状変更はplotと同様にできます。

stripchart(Sepal.Length ~ Species, iris, vertical = TRUE, pch = 21, lwd = 5, cex = 1.5)

lwdが軸にも影響するので、stripchartにはaxes = FALSEをつけて、axisboxで枠をつけたほうがよいでしょう。

stripchart(Sepal.Length ~ Species, iris, vertical = TRUE, pch = 21, lwd = 5, cex = 1.5, axes = FALSE)
labels <- levels(iris$Species)
axis(1, lwd = 0, lwd.ticks = 1, at = 1:length(labels), labels = labels)
axis(2, lwd = 0, lwd.ticks = 1)
box()

3 並び方の変更

method引数で、プロット位置を散らしたりできます。

stripchart(Sepal.Length ~ Species, iris, vertical = TRUE, pch = 21, lwd = 2, cex = 1.5, method = "jitter")

methodstack, jitter, overplotの3種類をとることができます。

4 色の変更

pch21から25を指定したとき、ポインターには境界色と領域色の2種類の色を、それぞれcolbgで指定できます。

colbgをそれぞれ1色づつ指定した場合は予想通りの挙動になりますが、複数指定する場合はcolbgで挙動が大きく異なります。

colは群ごとの境界色の指定です。irisデータセットのプロットでは、setosa、versicolor、virginicaの3因子で3種類の色を指定します。群の数に足りない場合は、繰り返し使います。

bgは群の中のそれぞれの観測値ごとの領域色の指定です。irisデータセットのプロットで観測値ごとに別の色を指定するには、50色が必要になります。観測値の数に足りない場合は、繰り返し使います。

crp <- colorRampPalette(c("white", "red"))
stripchart(Sepal.Length ~ Species, iris, vertical = TRUE, pch = 21, lwd = 2, cex = 1.5, method = "jitter", col = c("black", "red", "blue"), bg = crp(50))

介入群と対照群にpairedな関係がある場合は有用なのですが、群の並びに意味が無い場合は混乱を招くので避けましょう。

5 群ごとに領域色を変更する方法

重ねがきを使うことで、群ごとに領域色を変更することができます。

subset引数で描画する群を絞ることができるので、それで群ごとにstripchartで描画します。

最初のプロットでxlimylimを全データが入るように設定しておき、すべてのプロットでverticalオプションを揃えておかないと、適切に描画しないので注意してください。

model <- Sepal.Length ~ Species
col <- c("black", "red", "blue")
bg <- c("gray", "pink", "lightblue")
cex <- 1.5
lwd <- 3
method <- "jitter"
stripchart(model, iris, vertical = TRUE, method = method, pch = 21, col = col, bg = bg[1], cex = cex, lwd = lwd, subset = Species == "setosa", axes = FALSE, ylim = c(4, 8))
stripchart(model, iris, vertical = TRUE, method = method, pch = 21, col = col, bg = bg[2], cex = cex, lwd = lwd , subset = Species == "versicolor", add = TRUE)
stripchart(model, iris, vertical = TRUE, method = method, pch = 21, col = col, bg = bg[3], cex = cex, lwd = lwd, subset = Species == "virginica", add = TRUE)
axis(1, at = 1:3, labels = levels(iris$Species), lwd = 0, lwd.ticks = 1)
axis(2, lwd = 0, lwd.ticks = 1)
box()

線の太さの調整のために、目盛りと枠はaxisboxで描画しました。