我想从内核密度(kde2d)的不同轮廓线中找到多个多边形的总面积。 这是核密度和50%等高线的图像。如何计算50%等高线内的面积?
我还创建了一个lat lon坐标矩阵,它表示这个50%等高线内的点。使用这些点计算总面积会更容易吗?
任何建议都将不胜感激!
答案 0 :(得分:3)
在笛卡尔系统中得到坐标并使用这些坐标完成内核平滑后,可以使用contourLines
函数获取直线坐标,然后使用areapl
函数从splancs
包中计算每个简单环的区域。
例如,使用help(kde2d)
中的示例:
attach(geyser)
plot(duration, waiting, xlim = c(0.5,6), ylim = c(40,100))
f1 <- kde2d(duration, waiting, n = 50, lims = c(0.5, 6, 40, 100))
image(f1)
contour(f1)
这样我们的数据设置 - 假设我们想要0.008个轮廓中的区域:
C8 = contourLines(f1,level=0.008)
length(C8)
[1] 3
现在C8
是一个长度为3的列表。我们需要在每个上面应用areapl
函数:
> sapply(C8,function(ring){areapl(cbind(ring$x,ring$y))})
[1] 14.65282 12.27329 14.75005
我们显然可以总结:
> sum(sapply(C8,function(ring){areapl(cbind(ring$x,ring$y))}))
[1] 41.67617
现在,只有坐标是笛卡尔坐标,并且轮廓线是完整的循环才有意义。如果0.008轮廓靠近边缘,则轮廓可能被夹到边界框,然后发生坏事。至少检查每个环的最后一个点是否与第一个环相同。