統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

R のグラフの一部を塗りつぶす方法

グラフを描いた後、一部を塗りつぶしたいときがある。

そんなときにどうしたらいいか?

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

R のグラフの一部を塗りつぶす方法 標準正規分布の場合

確率分布の一部を塗りつぶしたい場合、以下のようにすれば可能。

# 前半
curve(dnorm(x), -4, 4, las=1, xlab="Z")
arrows(0,0,0,dnorm(0),length=0)

# 後半
xvalu <- seq(0,4,length=200)
dvalu <- dnorm(xvalu)
polygon(c(xvalu, rev(xvalu)), c(rep(0,200), rev(dvalu)),col="palegreen")

前半の curve() で確率分布を描く。

ここでは標準正規分布をdnorm()で描く。

arrows()はグラフの高さまで線を引くことができる。

arrows()の中の4つの数字は、始点のX座標とY座標、終点のX座標とY座標を表している。

0,0,0,dnorm(0)であれば、始点は(0,0)で、終点は(0,dnorm(0))までということになる。

最後のlength=は矢印の矢の大きさで0とすれば、矢はなくなり直線になる。

後半の xvalu は、塗りつぶしたい部分のX座標を規定している。

今回は0から4まで200に分けてという指示だ。

これだけ細かくすると人の目には連続しているように見える。

xvaluで規定したX座標に相当するY座標をdvaluに格納する。

polygon()で塗りつぶす。

()内最初のc()は、X座標を0から4に動かして、4から0に戻ってくるという値を指示している。

Y座標は最初の200は0で、あとの200は、xvaluが4から0に小さくなるについて、だんだんに大きくなる。

これで結局中心より右側が塗りつぶされることになる。

色はcol=で指定できる。

palegreenというような色の名前で指定できる。

出来上がりはこちら。

R のグラフの一部を塗りつぶす方法 t 分布の場合

下記は自由度df=8の t 分布を描いて、上側、下側2.5パーセントを塗りつぶすスクリプトだ。

n1 <- 5 
n2 <- 5 
df <- n1+n2-2 
curve(dt(x, df), -4, 4, las=1, xlab="t") 
arrows(qt(0.975,df),0,qt(0.975,df),dt(qt(0.975,df),df),0)
arrows(qt(0.025,df),0,qt(0.025,df),dt(qt(0.025,df),df),0)
xvalu <- seq(qt(0.975,df),4,length=100)
dvalu <- dt(xvalu, df)
polygon(c(xvalu, rev(xvalu)), c(rep(0,100), rev(dvalu)),col="skyblue")
xvall <- seq(-4, qt(0.025,df),length=100)
dvall <- dt(xvall, df)
polygon(c(xvall, rev(xvall)), c(rep(0,100), rev(dvall)),col="skyblue")

polygon()に使うX座標やY座標の計算の仕方や、polygon()での指示の出し方は上記の標準正規分布のときと同じだ。

ただし今回はdnorm()の代わりに、dt()を使い、dfで指定している自由度を与えてあげないといけない。

またX座標はおよそ2から4までを塗りつぶすことになり、上記例の半分なので、100に分割した。

出来上がりはこちら。

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

まとめ

curve()を使って確率分布を描き、polygon()を使って分布の一部を塗りつぶす方法を紹介した。

polygon()はいろいろと応用が利くと思う。

参考になれば。