首页 > 解决方案 > 如何使用matplotlib检测是否有交集?

问题描述

我正在使用 matplotlib 绘制这两个折线图。但是,只有有时我的图表会有交集。如何检测我的折线图是否有交叉点?

df = pd.read_csv("test.csv")

df2 = pd.read_csv("test2.csv")

x1 = df['A'].tolist()
x1 = np.array(x1)

y1 = df['D'].tolist()
y1 = np.array(y1)

x2 = df2['X'].tolist()
x2 = np.array(x2)

y2 = df2['Y'].tolist()
y2 = np.array(y2)

plt.plot(x1,y1)
plt.plot(x2,y2)
plt.show()

在此处输入图像描述

标签: pythonnumpymatplotlibplotvisualization

解决方案


您可以使用以下方法计算交叉点的索引:

idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()

如果有一个或多个交点,idx则为一个交点列表,否则为一个空列表。

  • 一个或多个路口

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = np.linspace(0, 10, 1000)
    x2 = np.linspace(-2, 5, 1000)
    y1 = np.sin(x1)
    y2 = np.cos(x2) + 1
    
    idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()
    
    fig, ax = plt.subplots()
    
    ax.plot(x1, y1, 'blue')
    ax.plot(x2, y2, 'red')
    
    plt.show()
    
    print(len(idx))
    2
    

    在此处输入图像描述

  • 没有十字路口

    import numpy as np
    import matplotlib.pyplot as plt
    
    x1 = np.linspace(0, 10, 1000)
    x2 = np.linspace(-2, 5, 1000)
    y1 = np.sin(x1)
    y2 = np.cos(x2) + 2
    
    idx = np.argwhere(np.diff(np.sign(y1 - y2))).flatten()
    
    fig, ax = plt.subplots()
    
    ax.plot(x1, y1, 'blue')
    ax.plot(x2, y2, 'red')
    
    plt.show()
    
    print(len(idx))
    0
    

    在此处输入图像描述


推荐阅读