在matplotlib图表中着色感兴趣区域[重复]

ovfsdjhp  于 2023-02-05  发布在  其他
关注(0)|答案(2)|浏览(138)
    • 此问题在此处已有答案**:

How to highlight specific x-value ranges(2个答案)
四年前关闭了。
给定一个像这样的图

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

如何自动为图表中y值介于(例如)1.25和0.75之间的垂直切片(从下到上)添加阴影?
正弦在这里只是一个样本,曲线的实际值不太规则。
我看过FIll between two vertical lines in matplotlib,它看起来和这个问题很相似,但是它的答案在固定的x值之间给一个区域加了阴影,我希望阴影区域由y值决定。

jhkqcmku

jhkqcmku1#

您可能正在寻找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()

vc9ivgsu

vc9ivgsu2#

你可以使用ax.axvspan,它显然完全符合你的要求。为了得到更好的结果,使用一个小于0.5的alpha值,并可选地设置颜色和边缘颜色/宽度。

fig, ax = plt.subplots()
ax.plot(s)
ax.set(xlabel='time (s)', ylabel='voltage (mV)', title='sine')
ax.axvspan(0.75, 1.25, alpha=0.2)
ax.grid()
plt.show()

如果希望着色显示在不同的方向(水平而不是垂直),也可以使用ax.axhspan方法。

相关问题