概述
fill_between和fill_betweenx函数的作用都是填充两条曲线之间的区域。其中
fill_between函数作用是填充两条水平曲线之间的区域。fill_betweenx函数作用是填充两条垂直曲线之间的区域。
两者参数非常相似,仅数据参数的名称、含义稍有不同。 fill_between函数的签名为:matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs) fill_betweenx函数的签名为:matplotlib.pyplot.fill_betweenx(y, x1, x2=0, where=None , interpolate=False,step=None,*, data=None, **kwargs)
fill_between函数
fill_between函数的签名为:matplotlib.pyplot.fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *, data=None, **kwargs)
参数说明如下:
x:定义两条曲线的节点的x坐标。长度为N的类数组结构。必备参数。y1:定义曲线的节点的y坐标。长度为N的类数组结构或者标量。必备参数。y2:定义第2条曲线的节点的y坐标。长度为N的类数组结构或者标量,默认值为0。可选参数。where:根据条件排除一些填充区域。长度为N的布尔数组。默认值为None。可选参数。interpolate:当该属性为True时将计算实际交点,并将填充区域延伸到此点。布尔值。默认值为False。注意:该属性只有使用了where属性且两条曲线相互交叉时才生效。step:拐点的计算方式。字符串,取值范围为{'pre', 'post', 'mid'}。默认值为None。可选参数。**kwargs:PolyCollection对象的相关属性。
fill_between函数的返回值为PolyCollection对象。
注意事项: 建议x,y1,y2使用数组结构,这样where参数的应用更加灵活。 两条曲线分别由(x,y1)和(x,y2)定义。两条曲线具有相同的x坐标。 两个曲线之间的填充区域可能有多个。 通过where参数可以排除一些填充区域。 默认直接连接给定点构成曲线。可以使用step函数改变连接点。
案例:演示fill_between的基本用法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407173139879.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pZ2h0eTEz,size_16,color_FFFFFF,t_70)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
# 构造x坐标
x = np.arange(0.0, 2, 0.01)
# 构造y1曲线的y坐标
y1 = np.sin(2 * np.pi * x)
# 构造y2曲线的y坐标
y2 = 0.8 * np.sin(4 * np.pi * x)
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, sharex=True, figsize=(6, 6))
# 参数y2 默认值为0
ax1.fill_between(x, y1)
ax1.set_title('填充y1与0之间的区域')
# 参数y2 的值为标量1
ax2.fill_between(x, y1, 1)
ax2.set_title('填充y1与0之间的区域')
ax3.fill_between(x, y1, y2)
ax3.set_title('填充y1与y2之间的区域')
ax3.set_xlabel('x')
plt.show()
案例:置信带
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407174152815.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pZ2h0eTEz,size_16,color_FFFFFF,t_70)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
x = np.linspace(0, 10, 11)
y = [3.9, 4.4, 10.8, 10.3, 11.2, 13.1, 14.1, 9.9, 13.9, 15.1, 12.5]
# 拟合曲线,并估计其y值及误差。
a, b = np.polyfit(x, y, deg=1)
y_est = a * x + b
y_err = x.std() * np.sqrt(1/len(x) +
(x - x.mean())**2 / np.sum((x - x.mean())**2))
# 绘制拟合线
plt.plot(x, y_est, '-')
# 填充置信带
plt.fill_between(x, y_est - y_err, y_est + y_err, alpha=0.2)
# 绘制数据点
plt.plot(x, y, 'o', color='tab:brown')
plt.show()
案例:演示interpolation参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407175348721.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L21pZ2h0eTEz,size_16,color_FFFFFF,t_70)
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='simhei'
plt.rcParams['axes.unicode_minus']=False
x = np.array([0, 1, 2, 3])
y1 = np.array([0.8, 0.8, 0.2, 0.2])
y2 = np.array([0, 0, 1, 1])
plt.subplot(211)
plt.title('interpolation=False')
# 绘制两条曲线
plt.plot(x, y1, 'o--')
plt.plot(x, y2, 'o--')
# 绘制曲线间填充
plt.fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3)
plt.fill_between(x, y1, y2, where=(y1 y2), color='C0', alpha=0.3,
interpolate=True)
plt.fill_between(x, y1, y2, where=(y1 y1), facecolor='yellow', alpha=0.5)
plt.fill_between(x, y1, y2, where=(y2 |