繁体   English   中英

如何避免与matplotlib.fill_between和哪里之间的差距

[英]How to avoid gaps with matplotlib.fill_between and where

我想填充两条曲线之间的区域,但仅当下部曲线> 0时才填充。 我在matplotlib使用fill_between()where条件(以测试哪个曲线更大)和numpy.maximum() (以测试下部曲线是否大于0)。 但也有在填充间隙,因为较低的曲线穿过整数之间的x轴,而结果maximum撞击x轴一个整数。 我怎样才能解决这个问题?

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插值:

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)

更新输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM