以下是我尝试使用指数平滑进行平滑的趋势示例:
import numpy as np
import matplotlib.pyplot as plt
y1 = np.random.randn(100)
y2 = np.random.randn(100)+2
y3 = 2*np.random.randn(100)+2
y4 = np.random.randn(100)
y = np.append(np.append(np.append(y1,y2),y3),y4)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(y)
def exp_smoothing(y, alpha):
s=np.zeros(len(y))
s[0] = y[0]
for i in range(1,len(y)):
s[i] = alpha*y[i]+(1-alpha)*s[i-1]
return np.array(s)
ax.plot(exp_smoothing(y,.05), c='r')
plt.show()
这给出了以下输出:
红线很好地了解了正在发生的平均值的变化,但没有关于方差的变化。
我想改变线条的厚度,因此较厚的部分表示原始趋势的部分具有较高的方差,而较薄的部分表示原始趋势的部分具有较低的方差。
我能想到的唯一方法是不使用set_lw
来绘制不是一行,而是绘制许多较小的行,每个行的宽度(参见documentation)。
有没有更好的方法来解决这个问题?