投稿

ラベル(contour)が付いた投稿を表示しています

Rで円を描く方法あれこれ

イメージ
グラフに円を描くような関数が用意されていてもよさそうなものですが、どうもないみたいですので、自力で描く必要がありそうです。 簡単のため、半径1の円の例です。 まず思いつくのは、   x^2 + y^2 = 1 をyについて解いて、   y = ±√(1 - x^2) という関数の形にして、curve関数を使って描く方法でしょうか↓ curve関数で上側と下側を別々に描く curve ( sqrt ( 1 -x^ 2 ) , xlim= c ( - 1 , 1 ) , ylim= c ( - 1 , 1 ) , asp= 1 ) curve ( - sqrt ( 1 -x^ 2 ) , xlim= c ( - 1 , 1 ) , ylim= c ( - 1 , 1 ) , add=T ) 媒介変数表示を使うやり方もありますね。  x = cosθ  y = sinθ の、x と y の組を plotしていく感じです↓ 媒介変数で座標を求めたあとにプロット theta <- seq ( - pi , pi , length = 100 ) plot ( cos ( theta ) , sin ( theta ) , type= "l" , asp= 1 ) ちなみに type=l オプションを忘れると↓こんな感じになります。 点でプロットすると理屈が分かりやすい plot ( cos ( theta ) , sin ( theta ) , asp= 1 ) 何度も使う場合は、中心座標や半径を引数として関数化しておくといいですね↓ こんなところに隠れミッキーが!(自分で描いたくせに) plot.circle <- function ( x , y , r ) { theta <- seq ( - pi , pi , length = 100 ) points ( x + r* cos ( theta ) , y + r* sin ( theta ) , type= "l" , asp= 1 ) } plot ( c ( -...

Rのcontour(等高線)を使って陰関数のグラフを描く

イメージ
Rで、y = f(x) という形の関数のグラフを描きたければ、curve関数を使えばいいですよね。 curve関数で描いた3次曲線のグラフ curve ( x^ 3 - x , from=- 1.5 , to= 1.5 , asp= 1 ) で、簡単にいきそうにないのは、f(x,y) = 0 という形。陰関数ってやつですね。x^2 + y^2 = 1とかも一例ですね。この例みたいな円の方程式くらいだったら、yについて解いちゃうとか、x=cos(t),y=sin(t)みたいに媒介変数を使う方法もあるんですが、この方法が任意の陰関数について使えるというわけではない。 で、どうやるかというと、答えは↓ここにあります。 陰関数で表された曲線の描画 - 裏 RjpWiki z = f(x,y) みたいに考えて、xy平面の各格子点に対してzの値を計算する。そして、contour関数を使って等高線を引く。その際、levels=0とオプション指定すれば、f(x,y) = 0のところに線が引かれるという、ちょっとトリッキーなやり方ですが、これで任意の陰関数のグラフが描けるので、とてもうれしいです。 この手法を理解するために、あえて簡単なサンプルをあげてみます。 contour関数で描いた円のグラフ n <- 10 # メッシュ分割数 x <- seq ( - 1 , 1 , length = n ) y <- seq ( - 1 , 1 , length = n ) z <- matrix ( 0 , n , n ) for ( i in 1 :n ) { for ( j in 1 :n ) { z [ i , j ] <- x [ i ] ^ 2 + y [ j ] ^ 2 # ここに陰関数を書く } } contour ( x , y , z , drawlabels = F , levels = 1 , asp= 1 ) 円がちょっと多角形っぽく見えるのはnが小さいからです。大きくすればなめらかな曲線になります。 この手法、contour関数を使ったことないとピンとこないですよ...