使用日期时间

时间:2018-05-04 09:18:36

标签: python datetime tkinter spline

我正在使用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.
你能帮帮我吗?感谢

2 个答案:

答案 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]))