Вот рабочий ответ для вас (исключая команды импорта).Идея заключается в следующем: сделать линейное подгонку к вашим данным, используя очень мелко расположенную x-сетку (используя 10000 точек сетки здесь, также можно использовать меньшую сетку).Вычтите 20
из этих точек х-сетки, чтобы получить расстояние от вертикальной линии.Точка пересечения будет иметь кратчайшее расстояние.Найдите это расстояние, используя min
, а затем получите соответствующее значение y (pwf
), которое будет точкой пересечения.
Получив эту точку пересечения, используйте plt.annotate
, чтобы пометить точку стрелкойи желаемый текст.
pwf, flowrate = [[] for _ in range(2)]
limit = 200
for p in range(limit):
pwf.append(np.random.randint(0,100))
for i, s in enumerate(pwf):
flo_rate = pwf[i]*2
flowrate.append(flo_rate)
fit = np.poly1d(np.polyfit(flowrate,pwf, 1))
x_mesh = np.linspace(min(flowrate), max(flowrate), 10000)
idx = np.argmin(abs(x_mesh - 20))
plt.plot(flowrate,pwf)
plt.axvline(20)
plt.annotate('Intersection', xy=(20, 0.95*fit(x_mesh[idx])), xytext=(50, 15),
arrowprops=dict(arrowstyle="->"),fontsize=16
)
