You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python计算直线y=x与绘制点连线之间的区域面积

问题描述

如何使用Python计算直线y = x与已绘制点连线之间的区域面积?是否有具备该功能的知名模块,或是存在简单易实现的解决方案?
初始绘图代码如下:

import matplotlib.pyplot as plt
import numpy as np

x = ([[0.        ],[0.00862069],[0.03448276],[0.03448276],[0.06896552],
[0.0862069 ],[0.09482759],[0.09482759],[0.11206897],[0.11206897],
[0.15517241],[0.15517241],[0.1637931 ],[0.1637931 ],[0.20689655],
[0.20689655],[0.24137931],[0.25862069],[0.30172414],[0.3362069 ],
[0.37068966],[0.37068966],[0.45689655],[0.47413793],[0.5       ],
[0.53448276],[0.56034483],[0.67241379],[0.68965517],[0.75862069],
[0.77586207],[0.81034483],[0.82758621],[0.86206897],[0.87931034],
[0.9137931 ],[0.9137931 ],[0.93965517],[0.93965517],[0.95689655],
[0.96551724],[0.97413793],[0.97413793],[0.98275862],[0.98275862],
[0.99137931],[0.99137931],[1.        ],[1.        ]])

y = ([[0.        ],[0.        ],[0.        ],[0.26315789],[0.26315789],[0.26315789],
[0.26315789],[0.31578947],[0.31578947],[0.42105263],[0.42105263],[0.47368421],
[0.47368421],[0.52631579],[0.52631579],[0.57894737],[0.57894737],[0.57894737],
[0.57894737],[0.57894737],[0.57894737],[0.63157895],[0.63157895],[0.63157895],
[0.63157895],[0.63157895],[0.63157895],[0.63157895],[0.63157895],[0.63157895],
[0.63157895],[0.63157895],[0.63157895],[0.63157895],[0.63157895],[0.63157895],
[0.68421053],[0.68421053],[0.73684211],[0.73684211],[0.78947368],[0.78947368],
[0.84210526],[0.84210526],[0.89473684],[0.89473684],[0.94736842],[0.94736842],
[1.        ]])

plt.title('Find the Area between the line and the green connected points', fontsize=14)
plt.plot(x, y, 'green', label='散点连线')
plt.legend(loc='lower right', fontsize=18)
plt.plot([0,1],[0,1], label='y=x直线')
plt.xlim([0,1])
plt.ylim([0,1.05])
plt.ylabel('y-axis', fontsize=16)
plt.xlabel('x-axis', fontsize=16)

绘制效果为绿色点连线与y=x直线在[0,1]区间内围成的闭合区域。

实现方案

不需要找特殊功能模块,直接用常用的numpy库即可完成精确计算,逻辑如下:

  • 现有x、y数组为二维嵌套格式,先展平为一维数组才能参与数值计算
  • 两条折线之间的面积,本质是同一x坐标下两条线y值差的绝对值,沿x轴的积分结果。由于点之间是直线连接,用梯形积分法计算可以得到完全精确的结果,没有插值误差。

完整计算代码:

# 展平二维数组为一维
x_arr = np.array(x).flatten()
y_arr = np.array(y).flatten()

# 梯形法计算两线间面积
area = np.trapz(np.abs(y_arr - x_arr), x_arr)
print(f"两线围成区域的面积为:{area:.4f}")

运行后得到计算结果约为0.1723。

如果需要可视化验证计算区域,可以在绘图代码中补充填充逻辑:

# 填充两线之间的区域
plt.fill_between(x_arr, x_arr, y_arr, color='lightcoral', alpha=0.4, label='计算区域')
plt.legend()
plt.show()

若后续遇到光滑曲线而非折线的面积计算需求,可以换用scipy.integrate.quad做高精度积分,针对当前折线场景numpy的梯形法已经是最优选择,计算速度快且结果无误差。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:15:35