如何校正平滑绘制的数据中的错误? (最终数据点已移动)

时间:2019-06-03 08:13:01

标签: python numpy matplotlib math

与图表的其余部分相比,最终数据点发生了偏移,其中包括绿色的参考图,没有进行平滑处理,显示了预期的最终数据点。

我尝试使用scipy等其他方法来平滑数据。

import tkinter
import matplotlib.pyplot as plt
import math as m
import numpy as np

warmup = 30
starttemp = 120
waittime = 10
soaktime = 15
endtemp = 210
heatrate = 10 # x/min
one = 1

temprange = endtemp - starttemp
time = ((temprange//heatrate)*60) 
#time in seconds from start to end temp
y = list(range(1,warmup,1))
x = temprange/heatrate
wur = list(range(warmup, starttemp,1))
interval = int(temprange//time)
methtime = list(range(starttemp,endtemp,1))
#integrate heating rate functionality into the 
#projection graph by adding interval variable.

for _ in range(one):
    y.extend(wur)

for _ in range(soaktime):
    y.append(starttemp)

for _ in range(waittime):
    y.append(starttemp)

for _ in range(one):
    y.extend(methtime)

def smooth(y, box_pts):
    box = np.ones(box_pts)/box_pts
    y_smooth = np.convolve(y, box, mode='same')
    return y_smooth

#plt.plot(y,'g--')
plt.plot(smooth(y,15), 'r--', lw=1)
plt.ylabel('Temperature')
plt.xlabel('Time')
plt.title('PID Control Graph For Current Method')
plt.show()

最终数据点应遵循数据的总体趋势,并在正确的最终温度下结束。

外观如何:https://imgur.com/90rHKaA 当前外观:https://imgur.com/NB5OXtI

1 个答案:

答案 0 :(得分:1)

您的盒卷积函数超出了数据范围,因此您会看到“边缘效应”。这是卷积的基本问题。

您可以缩短输出范围with mode ‘valid’

此外,您可以重复最后一个数据点几次(对应于框的宽度),以最大程度地减小这种影响并获得完整的输出范围(使用最后一个值而不是零填充)

也许还有另一种方法-如果可能的话,将“左侧”卷积函数应用于最后的条目。