Линейный график interpolate.interp1d не соответствует новым входам в функцию - PullRequest
0 голосов
/ 23 марта 2019

Я использовал 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, так что я уверен, что что-то упустил. Будем благодарны за любую помощь или указание в правильном направлении!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...