我试图遮蔽输入信号高(值 = 1)的绘图区域。该区域应保持阴影直到信号变低(值 = 0)。我已经非常接近了,以下是一些示例:http : //matplotlib.org/examples/pylab_examples/axhspan_demo.html在 matplotlib 图中,我可以突出显示特定的 x 值范围吗? 如何在 Python 中使用 Matplotlib 绘制阶跃函数?
问题是现在它只在信号 = 1 的地方直接着色,而不是到信号 = 0的下一个变化(阶跃函数)。例如,在下面的图像/代码中,我希望将绘图填充在 20-40 和 50-60 之间(而不是 20-30,以及低于 40 的峰值)。如何修改我的代码以实现这一目标?谢谢。

import numpy as np
import matplotlib.pyplot as plt
x = np.array([0,10,20,30,40,50,60])
s = np.array([0,0,1,1,0,1,0])
t = np.array([25,24,25,25,24,25,24])
fig, ax = plt.subplots()
ax.plot(x,t)
ax.step(x,s,where='post')
# xmin xmax ymin ymax
plt.axis([0,60,0,30])
ymin, ymax = plt.ylim()
# want this to fill until the next "step"
# i.e. should be filled between 20-40; 50-60
ax.fill_between(x, ymin, ymax, where=s>0, facecolor='green', alpha=0.5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
定义一个生成器,给出要填充的间隔。
def customFilter(s):
foundStart = False
for i, val in enumerate(s):
if not foundStart and val == 1:
foundStart = True
start = i
if foundStart and val == 0:
end = i
yield (start, end+1)
foundStart = False
if foundStart:
yield (start, len(s))
Run Code Online (Sandbox Code Playgroud)
使用它来获取要填充的间隔。
for start, end in customFilter(s):
print 1
mask = np.zeros_like(s)
mask[start: end] = 1
ax.fill_between(x, ymin, ymax, where=mask, facecolor='green', alpha=0.5)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5200 次 |
| 最近记录: |