我一直试图绘制一条线,沿着样条拟合。以下是我的代码的一般化版本。“波长”和“吸光度”是包含浮点值列表的列表。我的代码的一般化版本:
import matplotlib.pyplot as plt
import csv
from scipy.interpolate import UnivariateSpline
s = UnivariateSpline(wavelength, absorbance,bbox=[p[0][0],b[0][0]],s = 5)
n1 = len(wavelength)
xs = np.linspace(wavelength[0], wavelength[-1], n1*100)
ys = s(xs)
s.set_smoothing_factor(0.8)
plt.plot(wavelength, absorbance, 'o')
plt.plot(xs, ys,lw=3)
plt.show()
字符串
我现在得到一个错误消息:
Cell In[125], line 1
----> 1 plot3(r'C:\\Users\\meng.zu\\Desktop\\convert
data\\D1_17.1.SSC.txt',None,None,None)
Cell In[124], line 57, in plot3(path, c, y, k)
50 b.append([i,j])
51 break
---> 57 s = UnivariateSpline(wavelength, absorbance,bbox=[p[0]
[0],b[0][0]],s = 5)
58 n1 = len(wavelength)
59 xs = np.linspace(wavelength[0], wavelength[-1], n1*100)
File D:\Anaconda\Lib\site-packages\scipy\interpolate\_fitpack2.py:221, in UnivariateSpline.__init__(self, x, y, w, bbox, k, s, ext, check_finite)
217 x, y, w, bbox, self.ext = self.validate_input(x, y, w, bbox, k, s, ext,
218 check_finite)
220 # _data == x,y,w,xb,xe,k,s,n,t,c,fp,fpint,nrdata,ier
--> 221 data = dfitpack.fpcurf0(x, y, k, w=w, xb=bbox[0],
222 xe=bbox[1], s=s)
223 if data[-1] == 1:
224 # nest too small, setting to maximum bound
225 data = self._reset_nest(data)
error: (xb<=x[0]) failed for 2nd keyword xb: fpcurf0:xb=3.78832
型
其中p[0][0]和B[0][0]是两个浮点数,并且p[0][0] < B[0][0]
如果我不设置bbox范围,它看起来像这样:fit line without setting bbox range然而,我希望它适 symfony 值曲线区域,所以我设置了峰值周围的间隔来拟合它。这就是错误发生的地方。
以下是p[0][0]、B[0][0]和x[0]的值:
(3.7883158772582326, 4.035764192724556, 2.859500138756903).
型
我试着查找所有可能的资源,但找不到像这样的相关问题。
任何建议或意见将不胜感激!
1条答案
按热度按时间bz4sfanl1#
我猜这是你正在使用的一个库抛出的一个明确的错误,本质上这不是你的代码失败,而是你的数据有问题。
(xb<=x[0])似乎是导致失败的原因。xb的值是3.78832。我不知道x[0]的值是多少,但我猜xb需要小于它。
似乎和边界框有关。