我正在使用Python编写一个应用程序来收集有关温度和时间的信息,并将它们绘制在图表中。
如此处所见Smooth line with spline + datetime objects doesn't work
我想插入几个温度值,使图形温度时间更平滑。
此函数检索温度和时间的值,并将它们放入与位置相关的数组(卧室和厨房):
xTemp, yTemp = dataList[1].split(',')
xTime, yTime = dataList[3].split(',')
t = datetime.fromtimestamp(float(xTime)).strftime('%Y-%m-%d %H:%M:%S') # get time string
st = datetime.strptime(t, '%Y-%m-%d %H:%M:%S') # get datetime from time string
x.append(st)
y.append(xTemp)
X = np.array(x)
Y = np.array(y)
Xnew = matplotlib.dates.date2num(X)
if(len(X) >= 5):
X_smooth = np.linspace(Xnew.min(), Xnew.max(), 10)
Y_smooth = interp1d(X, Y, X_smooth)
# , assume_sorted = True, kind = 'quadratic')
a.plot(X_smooth, Y_smooth)
我收到了这个错误:
NotImplementedError: [736817.73790509 736817.73791152 736817.73791795 736817.73792438
736817.73793081 736817.73793724 736817.73794367 736817.7379501
736817.73795653 736817.73796296] is unsupported: Use fitpack routines for other types.
你能帮帮我吗?感谢
答案 0 :(得分:1)
您使用函数interp1d
是错误的。来自文档:
此类返回一个函数,其调用方法使用插值来查找新点的值
正如您在同一页面上的示例中所看到的,您应该仅使用您拥有的x和y值来调用interp1d
。这将返回一个函数,您可以传递新的x值并返回插值的y值:
x = np.arange(0, 10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
xnew = np.arange(0, 9, 0.1)
ynew = f(xnew) # use interpolation function returned by `interp1d`
所以在你的情况下,这将是:
f = interp1d(X, Y)
X_smooth = np.linspace(Xnew.min(), Xnew.max(), 10)
Y_smooth = f(X_smooth)
答案 1 :(得分:1)
interp1d
返回一个函数。请尝试以下方法:
Y_smooth = interp1d(X, Y)
print (Y_smooth(X_smooth[0]))