2017-07-29 9 views
1

私は思ったんだけど、なぜpolygon()作品非常によくして、両面カーブ(下の写真)が、その同じカーブの半分(トップ絵)で正しく動作しませんか?Rのポリゴンがフルカーブでは動作しますが、ハーフカーブでは動作しないのはなぜですか?

簡単な説明をお待ちしております。

par(mfrow = c(2, 1)) 

gg = curve(dnorm(x), -4, 0) # Not working! 
polygon(gg, col = 2) 

gg = curve(dnorm(x), -4, 4) # Working! 
polygon(gg, col = 2) 

enter image description here

答えて

3

一つcurve

polygonを開始し、あなたのカーブの終点を接続しているので、それはいくつかの奇妙な形状を作成します。 ?polygonから、

「最後の点を最初の点に結合することによってポリゴンが閉じられると仮定します。」

最初と最後の点はcurvefromto値によって与えられます。あなたの最初のケースでは、これらは-40です。

ちょうどあなたが1つのプロットに複数のカーブを入れたいときは、その問題に直面するかもしれない1つのプロット

での複数curve

gg = curve(dnorm(x), -4, 4, xlim = c(-4,0), xaxs = "i") # Working! 
polygon(gg, col = 2) 

enter image description here

curve()xlimxaxs = "i"を追加上記のように軸を制限することはできません。したがって、曲線オブジェクト(ここではgg)の構造を深く掘り下げなければなりません。

最初に2つの曲線を作成しましょう。私たちは、gg$x$y座標のリストだけであることがわかり

gg 
# $x 
# [1] -4.00 -3.96 -3.92 -3.88 -3.84 -3.80 -3.76 -3.72 -3.68 -3.64 -3.60 -3.56 -3.52 -3.48 -3.44 -3.40 -3.36 -3.32 -3.28 
# [20] -3.24 -3.20 -3.16 -3.12 -3.08 -3.04 -3.00 -2.96 -2.92 -2.88 -2.84 -2.80 -2.76 -2.72 -2.68 -2.64 -2.60 -2.56 -2.52 
# ..... 
# $y 
# [1] 0.0001338302 0.0001569256 0.0001837125 0.0002147280 0.0002505784 0.0002919469 0.0003396012 0.0003944025 0.0004573148 
# [10] 0.0005294147 0.0006119019 0.0007061107 0.0008135212 0.0009357722 0.0010746733 0.0.0014106023 0.0016122275 
# ..... 

gg = curve(dnorm(x), -4, 4) ; 
polygon(gg, col = 2) ; 
gg = curve(dnorm(x), -4, 0, xlim = c(-4,0), xaxs = "i", add = T) ; 

は、今、私たちはggを見てみましょう。したがって、0, 0に1つの座標を2番目のggに追加して、重複する2番目の曲線の終わりをシミュレートすることができます。その後、両方の曲線が正しくプロットされます。

gg$x <- c(gg$x, 0) 
gg$y <- c(gg$y, 0) 
polygon(gg, col = 4) 

enter image description here

1

ロキは、あなたが望むような曲線を記入する方法を示しますが、それがないと半分の曲線がいっぱいなぜあなたは前進し、この機能を使用するために探している場合に重要である、説明していません。

polygon()には1つの曲線が与えられているため、直線を描いて両端を閉じます。次に、カーブと新しい行の間のスペースを塗りつぶします。

完全な分布は、y軸上の同じ点まで上がり、落ち着いて、きれいな曲線を作成します。カーブの一番上で停止すると、カーブと両側の線の間の空白を残した方向の変化に線が引かれ、polygon()はその両方を塗りつぶします。

+0

最後の直線を描かないように、 'polygon()'( 'plot()'を使用しないでください)をすばやく修正しましたか?つまり、あなたは完全な両側カーブを持っていると仮定し、次に半曲線を使って左端をシェードすることにします。 – rnorouzian

関連する問題