如何在R中计算自定义绘制的频率多边形下方的覆盖区域面积
自定义频率多边形填充区域的面积计算方案
你绘制的红色填充区域本质是由直线段拼接形成的闭合多边形,不存在光滑曲线,不需要复杂的积分拟合,通过几何方法即可得到100%精确的结果,完全匹配屏幕上显示的区域范围。
核心逻辑
你调用polygon()函数时传入的两组坐标c(1, x1, 5)、c(0, y1, 0)已经完整描述了红色填充区域的所有边界顶点,只需要对这个闭合多边形做面积计算,就能得到无偏差的结果。
具体实现代码
方法1:梯形积分法(最简洁)
频率多边形的边界全部为直线段,x轴上方、多边形轮廓下方的面积和梯形积分计算结果完全等价:
x1 <- 1:5 y1 <- c(0.2, 0.14, 0.7, 0.11, 0.1) # 手动计算,无需安装额外包 # 计算相邻x点的间距 dx <- diff(x1) # 逐段计算梯形面积并累加 area_manual <- sum( (y1[-length(y1)] + y1[-1])/2 * dx ) # 调用pracma包的现成梯形积分函数,结果和手动计算完全一致 # install.packages("pracma") # 首次使用需安装 library(pracma) area_trapz <- trapz(x1, y1)
方法2:鞋带公式计算(100%匹配绘图的填充区域)
直接复用你绘图时的多边形顶点坐标,用通用多边形面积公式计算,和实际绘制的红色区域范围完全对齐,不会出现坐标偏移:
# 提取和polygon()函数完全一致的顶点坐标序列 poly_x <- c(1, x1, 5) poly_y <- c(0, y1, 0) # 鞋带公式计算多边形面积 area_shoelace <- 0.5 * abs( sum(poly_x[-length(poly_x)] * poly_y[-1]) - sum(poly_x[-1] * poly_y[-length(poly_y)]) )
结果说明
对你给出的示例数据,三种计算方法的结果完全一致,最终红色区域总面积为1.1。
适用场景提醒
- 由于你绘制的图形全部是直线段连接,上述计算为精确值,不存在数值积分的近似误差。
- 后续如果修改x的取值、y的数值或者调整多边形边界,只需要同步更新顶点坐标向量,计算逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Sergio_L9
相关产品推荐
相关产品推荐

