Rのsegments関数でグラフを塗りつぶす

やりたいのは↓こういうことだったりします。


51. 低水準作図関数 | R-Source より

やり方も上記リンク先に書いてあるので、ザッツオールです。

でも、領域を複数の台形に分けてpolygon関数で塗りつぶすという上記のやり方って、処理を頭の中で想像するのがけっこう難しい。

もっと単純に、縦棒をびっしり敷き詰めて塗りつぶすというやり方なら、頭の中で想像しやすいんじゃないかと思って、やってみました。



























plot(dnorm, -4, 4)
xvals <- seq(2, 4, length=1000)
dvals <- dnorm(xvals)
segments( xvals,0, xvals,dvals )

最初の3行は、前述のリンク先の流用でして、塗りつぶしのところだけ、線分を描画するsegments関数を使いました。segments(x1, y1,  x2, y2) とやると、(x1,y1) から (x2,y2) まで線分を引いてくれるという関数です。引数がベクトルなら複数の線分を引いてくれます。

length=20 と少なくしてしまうと、この(あまり賢くない)やり方のボロが出てしまいます↓


























なので、塗りつぶされている感じが出る程度まで、lengthを増やす必要があります。たくさんのグラフを描画するような場合は、このやり方は重くなってしまいそうですね。でも、グラフ1枚程度なら、1000本でも10000本でも大したことにはならないです。

塗りつぶしの方法としては理解しやすいでしょ。でも、やり方としてはpolygonで塗りつぶす方が賢いと思います。(実も蓋もない結論ですが・・・)

コメント

このブログの人気の投稿

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

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

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