Захват дисперсии при сглаживании тренда — можно ли менять толщину линии?

Вот пример тренда, который я пытался сгладить с помощью экспоненциального сглаживания:

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 (см. документация).

Есть ли лучший способ сделать это?


person ignoring_gravity    schedule 15.03.2018    source источник
comment
Вы можете попробовать matplotlib fill_between().   -  person SergiyKolesnikov    schedule 15.03.2018
comment
Именно то, что мне было нужно, спасибо!   -  person ignoring_gravity    schedule 15.03.2018