matplotlib 图表中感兴趣的阴影区域

ret*_*ere 3 python numpy matplotlib

给出一个像

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)
fig, ax = plt.subplots()
ax.plot(s)
ax.set(xlabel='time (s)', ylabel='voltage (mV)', title='sine')
ax.grid()
plt.show()
Run Code Online (Sandbox Code Playgroud)

如何自动为图表的 y 值在(例如)1.25 和 0.75 之间的图表的垂直切片(从下到上)着色?

正弦只是这里的一个样本,图的实际值不太规则。

在 matplotlib 的两条垂直线之间看到了FIll,它看起来类似于这个问题,但那里的答案在固定 x 值之间遮蔽了一个区域。我希望阴影区域由 y 值确定。

hel*_*ker 11

您可以使用ax.axvspan,它显然完全符合您的要求。为了获得更好的结果,请使用alpha低于 0.5 的值,并可选择设置颜色和边缘颜色/宽度。

Fig, ax = plt.subplots()
轴图
ax.set(xlabel='时间(s)', ylabel='电压(mV)', title='正弦')
ax.axvspan(0.75, 1.25, alpha=0.2)
ax.grid()
plt.show()

如果您希望阴影处于不同的方向(水平而不是垂直),也有方法ax.axhspan


sac*_*cuL 5

您可能正在寻找ax.fill_between,它非常灵活(请参阅链接的文档)。

对于您的具体情况,如果我理解正确,这应该足够了:

fig, ax = plt.subplots()
ax.plot(s)
ax.set(xlabel='time (s)', ylabel='voltage (mV)', title='sine')
ax.fill_between(range(len(s)), min(s), max(s), where=(s < 1.25) & (s > 0.75), alpha=0.5)
ax.grid()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明