如何避免 matplotlib.fill_ Between 和 where 之间的间隙

2023-12-24

我想填充两条曲线之间的区域,但仅当较低的曲线 >0 时。 我在用着fill_between() in matplotlib with a where条件(测试哪条曲线更大)和numpy.maximum()(测试下方曲线是否>0)。但填充中存在间隙,因为下部曲线与 x 轴相交between整数,而结果maximum击中 x 轴at一个整数。我怎样才能解决这个问题?

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10)
a = np.array([101, 102, 71, 56, 49, 15, 29, 31, 45, 41])
b = np.array([52, 39, 8, -7, -12, -45, -23, -9, 14, 19])

fig, ax = plt.subplots()
ax.plot(x, a)
ax.plot(x, b)
ax.fill_between(x, a, np.maximum(b, 0), where=a >= b, alpha=0.25)

plt.axhline(0, color='black')

(我希望白色三角形也有阴影。)


通过使用插值numpy.interp http://docs.scipy.org/doc/numpy/reference/generated/numpy.interp.html:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10)
a = np.array([101, 102, 71, 56, 49, 15, 29, 31, 45, 41])
b = np.array([52, 39, 8, -7, -12, -45, -23, -9, 14, 19])

x2 = np.linspace(x[0], x[-1] + 1, len(x) * 100)  # <---
a2 = np.interp(x2, x, a)                         # <---
b2 = np.interp(x2, x, b)                         # <---
x, a, b = x2, a2, b2                             # <---

fig, ax = plt.subplots()
ax.plot(x, a)
ax.plot(x, b)
ax.fill_between(x, a, np.maximum(0, b), where=a>b, alpha=0.25)

plt.axhline(0, color='black')

UPDATE

x2 = np.linspace(x[0], x[-1] + 1, len(x) * 100)

应替换为:

x2 = np.linspace(x[0], x[-1], len(x) * 100)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免 matplotlib.fill_ Between 和 where 之间的间隙 的相关文章

随机推荐