Rを使って曲線で囲まれた領域に色をつける

曲線のグラフを塗りつぶすやり方を前に書いたんですが↓

Rのsegments関数でグラフを塗りつぶす - Rプログラミングの小ネタ

Rのpolygon関数でグラフを塗りつぶす方法を理解する - Rプログラミングの小ネタ

上記は曲線とx軸に囲まれた領域に着色するというものでしたが、ほとんど同じやり方で曲線と曲線に囲まれた領域の色塗りもできますよね、という話。


curve(sin(x), 0, 4*pi)        # サイン曲線を描画
curve(cos(x), 0, 4*pi, add=T) # コサイン曲線を描画
 
n <- 1000                    # x軸上に取る点の数
x <- seq(pi, 3*pi, length=n) # プロットするx座標を求める
y1 <- sin(x)              # 曲線上のy座標を求める 曲線1
y2 <- cos(x)              # 曲線上のy座標を求める 曲線2
 
# 曲線1上→曲線2上の順で、頂点を指定する
polygon( c(x,rev(x)), c(y1,rev(y2)), col="gray")


上記は曲線上にたくさんの点を置いていき、それらを頂点とする多角形をpolygon関数で描画するというやり方。頂点の列がクロスしても、そのように塗りつぶしてくれるので、どちらの曲線が上にくるとか下にくるとか気にしなくてもOKです。

↓もう一つのやり方


# polygon関数のところ以外は前述の例と同じコードを実行後
 
# 曲線1上の点と曲線2上の点を結ぶ線分で領域を埋め尽くす
segments( x,y1, x,y2, col="gray")


setmentsは、曲線1の上にとった点と曲線2の上にとった点を線分で結ぶ関数なのですが、点を多数とると、この線分で領域が埋め尽くされて、まるで塗りつぶしたようになるというやり方。線分は上から下に引いても、下から上に引いても同じようになるので、こちらも曲線の上下関係を気にする必要はありません。

前者のやり方だと点は100個も取れば滑らかに見えるようになりますが、後者のやり方だと100個では足りないですね。(上記例では1000個にしました)

コメント

このブログの人気の投稿

Rのグラフで軸の目盛りの刻み幅を変更する方法

Rで繰り返しを含む数列の生成(rep関数、seq関数)

reorderを使ってggplotの棒グラフの並び順を降順にする方法