如何计算R中轮廓内的面积?

时间:2011-12-06 20:38:11

标签: r area contour

我想知道是否有可能在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)

抱歉,我知道这段代码可能会令人费解。如果它太难读了。您可以向我展示如何计算简单生成轮廓的面积的任何示例都会有所帮助。

感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

感谢@DWin的可重复性示例,以及sos(我最喜欢的R包!)和splancs的作者......

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

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