Как выполнить функцию, чтобы точки находились на прямой, а не на оси y = 0, используя Matplotlib? - PullRequest
0 голосов
/ 18 марта 2019

У меня есть кусок кода, и мне нужно заполнить ema_func2, чтобы точки были на оранжевой линии

from matplotlib import pyplot as plt    
import numpy as np

halflife = 0.25
resolution_per_second = 1000
values = np.concatenate([np.zeros(resolution_per_second),
                         np.ones(resolution_per_second * 2),
                         np.zeros(resolution_per_second),
                         np.ones(resolution_per_second * 1),
                         np.zeros(resolution_per_second * 2),
                         ])
t_grid = np.arange(0, len(values)) / resolution_per_second
step = 1.0 / resolution_per_second
k = np.power(0.5, 1 / (halflife * resolution_per_second))

def ema_fixed_step(y, k): #ema method 1 on chart
    res = np.zeros_like(y)
    curV = y[0]
    for i in range(1, len(y) - 1):
        curV = k * curV + (1 - k) * y[i]
        res[i + 1] = curV
    return res

ema1_arr = ema_fixed_step(values, k)

#
w = values != np.roll(values, 1)
w[0] = True
t_new = t_grid[w]
values_new = values[w]
t_extra = [0.6, 1.0001, 1.2, 1.5, 2.9, 4.5, 3.3, 5.5]

t_req = np.sort(np.concatenate([t_new, t_extra]))


def ema_func2(t_req, t, y): #ema method 2 on chart
    return np.zeros_like(t_req, dtype=np.double)

ema2_arr = ema_func2(t_req, t_new, values_new)

plt.clf()
plt.step(t_grid, values, '.-', where='post', label='y')
plt.step(t_grid, ema1_arr, '.-', where='post', label='ema method 1')
plt.plot(t_req, ema2_arr, 'o', color='red', markersize=4, label='ema method 2')


plt.grid()
plt.legend()
plt.xlabel('t, seconds')

Это часть кода и результат:

enter image description here

И, как я уже говорил выше, необходимо завершить функцию, чтобы эти красные точки появились на оранжевой кривой. Итак, мне нужно взять какой-то кусок из ema_fixed_step и каким-то образом изменить его согласно t_req. Как это можно сделать?

...