Rのpolygon関数でグラフを塗りつぶす方法を理解する
グラフの一部を塗りつぶす方法として、segments関数で線分を敷き詰めるやり方を↓こちらで紹介しましたが、
segments関数でグラフを塗りつぶす - Rプログラミングの小ネタ
正直なところ、polygon関数で塗りつぶすやり方↓の方がスマートな気がします。
51. 低水準作図関数 - R-Source
でも、上記に掲載されているサンプルを見ても、すぐに理解できない人も多いのでは?ということで、分かりやすく解説する記事を書いてみようと思います。Rエキスパートの人は帰った、帰った。
例えば、サインカーブの下部を塗りつぶしたいとします。あえて分割数を少なくして、上記に紹介されている方法を適用してみると、↓こんな感じになります。
3点だけだと、全然曲線っぽくないですよね。
点の数を増やしていきます。(サンプルソースの中のnを変える)
↑20点も取れば、ほとんど曲線に見えますね。
↑上記は100点。これ以上増やしても見栄えは変わらないと思います。
次は、polygonへの頂点指定の仕組みを見ていきましょう。
c関数で連結してあるので分かりにくいですが、最初にx軸上の点を、次に曲線上の点が指定されています。
polygon( c(xs,rev(xs)), c(rep(0,n),rev(ys)), col="gray")
青がx軸上の点の指定、赤がy軸上の点の指定となっています。
rep関数は、0をn個繰り返す(x軸上だからy座標は0なので)、rev関数は、ysベクトルの要素を反対に並べる(帰りがけにプロットしていくので)、という意味です。
点に番号を振って、分かりやすくしてみました。
これらの番号が振られた点を頂点とするポリゴンを描画せよ、という命令なわけですね。
segments関数でグラフを塗りつぶす - Rプログラミングの小ネタ
正直なところ、polygon関数で塗りつぶすやり方↓の方がスマートな気がします。
51. 低水準作図関数 - R-Source
でも、上記に掲載されているサンプルを見ても、すぐに理解できない人も多いのでは?ということで、分かりやすく解説する記事を書いてみようと思います。Rエキスパートの人は帰った、帰った。
例えば、サインカーブの下部を塗りつぶしたいとします。あえて分割数を少なくして、上記に紹介されている方法を適用してみると、↓こんな感じになります。
x座標を3点(polygon関数による描画) |
3点だけだと、全然曲線っぽくないですよね。
点の数を増やしていきます。(サンプルソースの中のnを変える)
x座標を4点(polygon関数による描画) |
x座標を5点(polygon関数による描画) |
x座標を10点(polygon関数による描画) |
x座標を20点(polygon関数による描画) |
↑20点も取れば、ほとんど曲線に見えますね。
x座標を100点(polygon関数による描画) |
↑上記は100点。これ以上増やしても見栄えは変わらないと思います。
次は、polygonへの頂点指定の仕組みを見ていきましょう。
c関数で連結してあるので分かりにくいですが、最初にx軸上の点を、次に曲線上の点が指定されています。
polygon( c(xs,rev(xs)), c(rep(0,n),rev(ys)), col="gray")
青がx軸上の点の指定、赤がy軸上の点の指定となっています。
rep関数は、0をn個繰り返す(x軸上だからy座標は0なので)、rev関数は、ysベクトルの要素を反対に並べる(帰りがけにプロットしていくので)、という意味です。
点に番号を振って、分かりやすくしてみました。
頂点をナンバリングしたもの(polygon関数による描画) |
これらの番号が振られた点を頂点とするポリゴンを描画せよ、という命令なわけですね。
コメント
コメントを投稿