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

Matplotlib中两条曲线精确交点计算异常问题求助

Matplotlib中两条曲线精确交点计算异常问题求助

嗨,我完全懂你的困扰!你现在代码里算出来的是拟合直线和红色水平线y=60的交点,但你实际想要的是原始数据连成的折线和这条水平线的精确交点,这就是结果不符合预期的原因啦~

咱们来拆解下问题:你用linregress得到的是原始数据的最佳拟合直线,用它计算的交点自然是拟合线和y=60的交点,而不是你画出来的那条折线的交点。原始数据是离散的点,折线是连接相邻点的线段,所以得针对每一段线段去判断是否和y=60相交,再计算交点坐标。

下面是修改后的代码,直接替换你原来的拟合和交点计算部分就行:

import numpy as np
import matplotlib.pyplot as plt

E = [113.3, 86.8, 74.6, 55.751, 46.147, 38.793]
L = [7.06, 8.06, 9.06, 10.06, 11.06, 12.06]

plt.plot(L, E)
plt.axhline(60, color='r', linestyle='-')

# 寻找折线与y=60的交点
x_intersect = None
y_intersect = 60

# 遍历每一段相邻的线段
for i in range(len(E)-1):
    e1, e2 = E[i], E[i+1]
    l1, l2 = L[i], L[i+1]
    
    # 判断这段线段是否穿过y=60(两点分别在60的两侧)
    if (e1 >= y_intersect and e2 <= y_intersect) or (e1 <= y_intersect and e2 >= y_intersect):
        # 用线性插值计算交点的x坐标
        # 线段的线性方程:y = mx + b,这里求y=60时的x
        m = (e2 - e1)/(l2 - l1)
        x_intersect = l1 + (y_intersect - e1)/m
        break

if x_intersect is not None:
    print(f"Intersection point coordinates: ({x_intersect:.4f}, {y_intersect})")
    # 可以把交点标在图上更直观
    plt.scatter(x_intersect, y_intersect, color='green', marker='o', label='Intersection')
    plt.legend()

plt.show()

咱们来解释下关键部分:

  • 遍历每一对相邻的(L,E)点,检查这两个点的E值是否分别在60的上下两侧,这样就能确定这段线段和y=60相交
  • 用线性插值计算交点的x值:因为相邻点之间的线段是直线,所以通过两点式推导,就能算出当y=60时对应的x坐标
  • 最后还可以把交点用绿色圆点标在图上,更直观看到结果

运行这段代码后,你得到的就是原始折线和y=60的精确交点啦~

备注:内容来源于stack exchange,提问作者Ayush Fotedar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:39:14