首页 > 解决方案 > interpolate.interp1d 线性图与函数的新输入不一致

问题描述

我使用 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 还很陌生,所以我确信我一定遗漏了一些东西。任何帮助或指出正确的方向将不胜感激!

标签: python-3.xmatplotlibscipy

解决方案


推荐阅读