Я использовал scipy.interpolate.interp1d для линейной интерполяции между двумя массивами со значениями с плавающей запятой. Затем я построил функцию интерполяции с помощью matplotlib. Однако я заметил, что некоторые новые значения (которые изначально не были включены в массивы, представляющие данные x и y), дают при подключении к функции интерполяции результаты, отличные от того, что предлагает график.
По сути, я пытаюсь найти точки пересечения между несколькими линиями, параллельными оси x, и линейной кривой функции интерполяции. Проведя онлайн-исследования, я обнаружил, что многие люди используют для этой цели scipy interpolate.interp1d.
Вот код:
from scipy import interpolate
import matplotlib.pyplot as plt
# Data
size = [12, 9, 6.5, 4.8, 2, 0.85, 0.45, 0.15, 0.07]
poW = [100, 99, 98, 97, 94, 80, 50, 6, 1]
# Approximate function f: size = f(poW)
f = interpolate.interp1d(poW, size, kind="linear")
# Here I create the plot
plt.axes(xscale='log') # scale x-axis
plt.plot(size, poW, "bs", # add data points with blue squares
f(poW), poW, "b") # add a blue trendline
# Draw D_10 as an additional point
plt.plot(f(10), 10, "rx", markersize=15)
# Draw D_30 as an additional point
plt.plot(f(30), 30, "rx", markersize=15)
# Draw D_60 as an additional point
plt.plot(f(60), 60, "rx", markersize=15)
plt.show()
Дополнительные точки, которые я рисую в последних 3 строках перед plt.show()
, не соответствуют тем же позициям, которые указаны графиком самой функции интерполяции. Это довольно интересно для меня, и я не могу найти проблему здесь. Я довольно новичок в matplotlib и scipy, так что я уверен, что что-то упустил. Будем благодарны за любую помощь или указание в правильном направлении!