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

我将假设您正在使用由轮廓线返回的对象。(一个未命名的列表,每个级别都有 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
于 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 回答