stripchart
で一次元散布図を描くことができ、同一の群の中が幾つかに分かれているような事がないかの確認をしつつ、boxplot
よりも直感的に群間比較を行えます。
早速、iris
データセットをプロットしてみましょう。
味気の無い図ができました。
2 ポインターの形状変更
ポインターの形状変更はplot
と同様にできます。
lwd
が軸にも影響するので、stripchart
にはaxes = FALSE
をつけて、axis
とbox
で枠をつけたほうがよいでしょう。
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")
method
はstack
, jitter
,
overplot
の3種類をとることができます。
4 色の変更
pch
に21
から25
を指定したとき、ポインターには境界色と領域色の2種類の色を、それぞれcol
とbg
で指定できます。
col
とbg
をそれぞれ1色づつ指定した場合は予想通りの挙動になりますが、複数指定する場合はcol
とbg
で挙動が大きく異なります。
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
で描画します。
最初のプロットでxlim
とylim
を全データが入るように設定しておき、すべてのプロットで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()
線の太さの調整のために、目盛りと枠はaxis
とbox
で描画しました。