6

Rで輪郭内の領域を計算することが可能かどうか疑問に思っています.

たとえば、次の結果として生じる等高線の面積:

sw<-loess(m~l+d)
mypredict<-predict(sw, fitdata) # Where fitdata is a data.frame of an x and y matrix

contour(x=seq(from=-2, to=2, length=30), y=seq(from=0, to=5, length=30), z=mypredict)

申し訳ありませんが、このコードは複雑かもしれません。読むのが難しすぎる場合。単純に生成された輪郭の面積を計算する方法を教えてくれる例は役に立ちます。

助けてくれてありがとう。

4

2 に答える 2

6

私は、contourLines によって返されたオブジェクトを操作していると仮定します。(各レベルに x および y コンポーネントを含む名前のないリスト。) アクセスしやすい場所でこれを見つけることを期待していましたが、代わりに、http://finzi.psych.upennを見たことを漠然と覚えているアルゴリズムを提供する pdf ファイルを見つけました。 .edu/R/library/PBSmapping/doc/PBSmapping-UG.pdf (「-11-」というラベルの付いた pdf ページ 19 を参照) (追加注: 「ポリゴン」に関するウィキペディアの記事は、測量士の公式に関するこの議論を引用しています: http ://www.maa.org/pubs/Calc_articles/ma063.pdf、これは abs() の使用を正当化します)

例の構築:

 x <- 10*1:nrow(volcano)
 y <- 10*1:ncol(volcano)
contour(x, y, volcano); 
clines <- contourLines(x, y, volcano)
x <- clines[[9]][["x"]]
 y <- clines[[9]][["y"]]
 level <- clines[[9]][["level"]]
 level
#[1] 130

レベル == 130 の領域 (2 つの 130 レベルがなく、プロット境界のいずれとも一致しないため選択) は、次のようになります。

A = 0.5* abs( sum( x[1:(length(x)-1)]*y[2:length(x)] - y[1:(length(x)-1)]*x[2:length(x)] ) )
A
#[1] 233542.1
于 2011-12-06T22:14:06.643 に答える
5

再現可能な例を提供してくれた @DWin と、sos(私のお気に入りの R パッケージ!)の作成者に感謝しsplancsます。

library(sos)
findFn("area polygon compute")
library(splancs)
with(clines[[9]],areapl(cbind(x,y)))

@DWin と同じ回答が得られ、心強いです。(おそらく同じアルゴリズムですが、splancsパッケージ内の Fortran ルーチン内に実装されています ...)

于 2011-12-06T22:47:49.753 に答える