python - 如何使用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()
解决方案
您可以使用以下方法计算交叉点的索引:
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
推荐阅读
- mobile-safari - Safari ios 和 ipad 用相机放大
- r - R切割功能:如何切割可以包括右最低和最高边界的数据
- java - 批量更新执行中的更新查询需要很长时间
- c++ - 如何使 CMake 与专有的 C++ 编译器配合使用?
- google-apps-script - 我如何让 event.getEventById('id') 或 event.getEventSeriesById('id') 返回 null 以外的任何内容
- java - Java在与主类不同的类中调用void方法?
- debugging - 调试简单的 Prolog 函数
- recursion - 如何在 Scheme 中遍历树?
- bash - Bash 陷阱 SIGINT 多次不起作用
- javascript - express 中传递函数和 () => {} 的区别