我应该添加什么以在Matplotlib的橙色曲线上添加红色标记? [英] What should I add to add red-markers on the orange curve in Matplotlib?

查看:188
本文介绍了我应该添加什么以在Matplotlib的橙色曲线上添加红色标记?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码,我需要在橙色曲线上放置标记

Here is my code and I need put markers on the orange curve

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')

我有这个

我认为问题出在EMA2函数中,但我无法恢复了解如何将其编辑为我想要的
我在np.where上实现过的方式,但是它没有奏效
我也尝试使用数学方法来制作它,但是仍然不知道
有什么建议吗?

I think the problem is in EMA2 function but I can't understand how to edit it to be the way I want I trued np.where, but it didn't work out I also tried to made it using mathematics, but still have no clue Any suggestions ?

推荐答案


  1. 您没有包括进口商品,但幸运的是我知道了
  1. You didn't include imports, but luckily I figured them out
  2. I had to remove a value from t_extra as there was no corresponding point

也就是说,这是我想出的内容

That said, here is what I came up with

import numpy as np
import matplotlib.pyplot as plt

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.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')

markers_y = []
for t in t_grid:
    if t in t_req:
        index = list(t_grid).index(t)
        markers_y.append(ema1_arr[index])

plt.scatter(t_req, markers_y, color='red', label='markers', zorder=10)

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

plt.show()

输出:

基本上,我只是列出了一个清单,如果匹配的时间我在适当的索引处获取了y值(因为x和y必须具有相同的索引才能进行绘图)。然后我通过 zorder = 10

这篇关于我应该添加什么以在Matplotlib的橙色曲线上添加红色标记?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆