Python 如何更正平滑打印数据中的错误?(最终数据点已移动)

Python 如何更正平滑打印数据中的错误?(最终数据点已移动),python,numpy,matplotlib,math,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

最终数据点相对于图形的其余部分移动,包括绿色的参考图,没有平滑显示预期的最终数据点

我尝试过使用其他方法(如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()
最终数据点应遵循数据的一般趋势,并在正确的结束温度下结束

它应该是什么样子:
当前外观:

您的长方体卷积函数超出了数据范围,因此您可以看到边缘效果。这是卷积的基本问题

您可以缩短输出范围

此外,您还可以根据框宽重复上一个数据点几次,以最小化此影响,并使用最后一个值(而不是零)获得完整的输出范围填充


也许还有一种方法-如果可能的话,对最后的条目应用左侧卷积函数来连接结果。

谢谢,将其更改为有效似乎可以解决问题!def smoothy,box_pts:box=np.onesbox_pts/box_pts y_smooth=np.convolvey,box,mode='valid'返回y_平滑