2011-12-06 126 views
6

我想知道如果有可能的轮廓内caclulate的区域R.如何计算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) 

对不起,我知道下面的代码可能错综复杂。如果太难阅读。任何示例,您可以告诉我如何计算简单生成的轮廓的面积将会很有帮助。

感谢您的任何帮助。

+1

您的意思是区域*在*轮廓内吗? – Phonon

+0

如何定义轮廓(示例)...您想要什么区域?如果你有一个边界的坐标,它相对容易。 – John

+0

是的。轮廓内的区域。 @约翰:我会编辑一个例子到我原来的问题。 –

回答

5

感谢@DWin的可重复的例子,并且的sos(我的最爱 - [R包!)和splancs作者...

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

获取相同的答案@DWin,这是令人欣慰的。 (推测它是相同的算法,但是在Fortran例程中实现,在splancs包中...)

+2

因为我刚刚进入'help(contourlInes)'页面并且抓住了那里的例子,所以我不值得赞赏。 @BurtonGuster应该随时给Ben一个复选标记。我可能应该捐出几千点给Ben,以表示他在这里和R-help邮件列表上发布的所有优秀作品。同样对哈德利和加博尔Grothendeick –

+0

我同意@DWin – Andrie

+0

@DWin和本:感谢您的帮助! –

6

我打算假设你正在使用contourLines返回的对象。 (一个在每个级别都有x和y组件的未命名列表)。我期待在一个易于访问的位置找到它,但是却发现了一个pdf文件,它提供了一个算法,我隐约记得看到这个算法http://finzi.psych.upenn.edu/R/library/PBSmapping/doc/PBSmapping-UG.pdf(请参见pdf第19页,标记为“ -11-“)(由注:在维基百科的文章‘多边形’援引测量师公式的讨论: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(因为没有两个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