Python 如果信号值大于信号平均值,则画一条线

Python 如果信号值大于信号平均值,则画一条线,python,if-statement,matplotlib,signal-processing,Python,If Statement,Matplotlib,Signal Processing,我想在图上画一条线,当我的信号值大于这个信号的平均值时。我的信号是肌肉拉伸和放松的简单连接 muscle_on2 = np.random.uniform(-1, 1, 1000) + offs muscle_off = np.random.uniform(-0.05, 0.05, 500) + offs emg = np.concatenate([muscle_off, muscle_on1, muscle_off, muscle_on2, muscle_off]) 为了做到这一点,我尝试了以

我想在图上画一条线,当我的信号值大于这个信号的平均值时。我的信号是肌肉拉伸和放松的简单连接

muscle_on2 = np.random.uniform(-1, 1, 1000) + offs
muscle_off = np.random.uniform(-0.05, 0.05, 500) + offs
emg = np.concatenate([muscle_off, muscle_on1, muscle_off, muscle_on2, muscle_off])
为了做到这一点,我尝试了以下方法:

pl.plot(x_axis)
for i in range(0, len(emg), 1):
    if emg[i]>RM:
        pl.plot([i, 1.0], [i, 1.0], 'r-', lw=5)
其中RM为:

RM = np.mean(emg)
但是,它不生成水平线,而是生成垂直线:

有人能帮我吗

我忘了澄清这一点,在这种情况下,offs(偏移量已经过滤掉)这部分代码是用来显示我的信号是如何创建的。当我打印出照片上的平均值时,它在0.26左右振荡。我希望我的行在信号值大于平均值时出现,并在信号值小于平均值时结束。

您应该使用

导入matplotlib.pyplot作为plt
将numpy作为np导入
肌肉2=np.随机.均匀(0,1,1000)
肌肉=np.随机.均匀(0,0.05500)
emg=np.连接([muscle\u off,muscle\u on2,muscle\u off])
RM=np.平均值(肌电)
平面图(肌电图)
plt.axhline(RM,color='r')
plt.show()
这会给你

或者如果你不想一路穿过这个情节

导入matplotlib.pyplot作为plt
将numpy作为np导入
肌肉2=np.随机.均匀(0,1,1000)
肌肉=np.随机.均匀(0,0.05500)
emg=np.连接([muscle\u off,muscle\u on2,muscle\u off])
e=x[emg>RM]
plt.绘图(x,肌电图)
plt.hlines(RM,e[0],e[-1],color='r',lw=2,zorder=3)
plt.show()


注意  -  
matplotlib.pyplot
import
约定是

导入matplotlib.pyplot作为plt
pylab
的约定是

将matplotlib.pylab作为pl导入
如果您使用的是
pylab
,则应切换到
pyplot
,如图所示。

您应使用

导入matplotlib.pyplot作为plt
将numpy作为np导入
肌肉2=np.随机.均匀(0,1,1000)
肌肉=np.随机.均匀(0,0.05500)
emg=np.连接([muscle\u off,muscle\u on2,muscle\u off])
RM=np.平均值(肌电)
平面图(肌电图)
plt.axhline(RM,color='r')
plt.show()
这会给你

或者如果你不想一路穿过这个情节

导入matplotlib.pyplot作为plt
将numpy作为np导入
肌肉2=np.随机.均匀(0,1,1000)
肌肉=np.随机.均匀(0,0.05500)
emg=np.连接([muscle\u off,muscle\u on2,muscle\u off])
e=x[emg>RM]
plt.绘图(x,肌电图)
plt.hlines(RM,e[0],e[-1],color='r',lw=2,zorder=3)
plt.show()


注意  -  
matplotlib.pyplot
import
约定是

导入matplotlib.pyplot作为plt
pylab
的约定是

将matplotlib.pylab作为pl导入

如果您使用的是
pylab
,则应切换到
pyplot
,如图所示。

代码中的
offs
是什么?请提供一份报告。同样,你也不清楚你希望你的线路是怎样的?水平的?线路的分机号码是多少?对不起。我忘了澄清一下,在这种情况下,offs(偏移量已经被过滤掉)这部分代码是用来显示我的信号是如何产生的。当我打印出照片上的平均值时,它在0.26左右振荡。我希望我的行在信号值大于平均值时出现,在信号值小于平均值时结束。你有机会看看我的答案吗?该方法是否提供了所需的输出?代码中的
offs
是什么?请提供一份报告。同样,你也不清楚你希望你的线路是怎样的?水平的?线路的分机号码是多少?对不起。我忘了澄清一下,在这种情况下,offs(偏移量已经被过滤掉)这部分代码是用来显示我的信号是如何产生的。当我打印出照片上的平均值时,它在0.26左右振荡。我希望我的行在信号值大于平均值时出现,在信号值小于平均值时结束。你有机会看看我的答案吗?这种方法能给你想要的输出吗?这是一个很好的解决方案,但我想它很容易矢量化。如果到时候你还没有时间,我会在我有时间的时候整理一些东西。@anishtain4是的,有一种更简单的过滤方法:
x[emg>RM]
-我应该先用它,然后结合使用它和
np.diff
来找到行的开始和结束,然后可以使用
plt.hlines
一次绘制所有区域。@anishtain4如果需要数据移动平均值超过平均值的多个区域。我忽略了,为了简单起见,如果OP消歧在信号值大于平均值时出现,并且在信号值小于平均值时结束,我将相应地修改我的答案,这是一个很好的解决方案,但我猜它可以很容易地矢量化。如果到时候你还没有时间,我会在我有时间的时候整理一些东西。@anishtain4是的,有一种更简单的过滤方法:
x[emg>RM]
-我应该先用它,然后结合使用它和
np.diff
来找到行的开始和结束,然后可以使用
plt.hlines
一次绘制所有区域。@anishtain4如果需要数据移动平均值超过平均值的多个区域。为了简单起见,我忽略了,如果OP消歧在信号值大于平均值时出现,并且在信号值小于平均值时结束,我将相应地修改我的答案