値によってcolやpchを変えてプロットする
例えばこんな図を描いてみる。
> x <- rnorm(100) > y <- rnorm(100) > plot(x, y)
yの値が0以上であるものを黒で、0未満であるものを赤で塗り別けたいとします。そういうとき、簡単な方法として2つあります。
# 方法その1 ifelse()を使う > plot(x, y, col=ifelse(y >= 0, 1, 2)) # 方法その2 > plot(x, y, col=(y>=0)+1) > plot(x, y, col=c("black", "red")[(y>=0)+1])
方法その1で描いたグラフ
方法その2で描くと、0以上が赤、0未満が黒になる。
それについては、以下の説明を読めば分かる。
もちろん、方法2でこのグラフを同じようにする方法も。
上の2例について少し補足。
iflese(y >= 0, 1, 2)というのは、「yの値が0以上ならば1、そうでなければ2」という意味です。簡単な数値例で確認してみます。
> z <- 0:10 # 5以上なら1、そうでなければ2 > ifelse(z>=5, 1, 2) [1] 2 2 2 2 2 1 1 1 1 1 1
(y>=0)+1とすると、上のifelse()を使った場合と同じようなことができます。
> (z >= 5) + 1 [1] 1 1 1 1 1 2 2 2 2 2 2
これはどういうことか?
# z>=5をとりあえずaに代入してみる > a <- z>=5 # aは論理型のベクトルであることがわかる > a [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE > is.logical(a) [1] TRUE # 論理型のベクトルに数値を"足す"とこうなる > a + 1 [1] 1 1 1 1 1 2 2 2 2 2 2 > a + 0.5 [1] 0.5 0.5 0.5 0.5 0.5 1.5 1.5 1.5 1.5 1.5 1.5 > a + -1 [1] -1 -1 -1 -1 -1 0 0 0 0 0 0