python——Matplotlib之fill_between函数

Matplotlib是Python提供的一套基于NumPy的绘图工具包,用Python实现与MATLAB相似的命令API,十分适合交互式绘制图表,成为Python中应用非常广的绘图工具包之一。

在对数据可视化时,为了突出某一段数据需要对部分区域进行填充处理。Matplotlib中通过fill_between()函数实现填充两个水平曲线之间的区域。

首先我们通过以下语句,查看fill_between的参数列表

plt.fill_between?

python——Matplotlib之fill_between函数

可以看到fill_between()函数语法:

matplotlib.pyplot.fill_between(x,y,y2=0,where=None,interpolate=False,step=None,*,data=None,**kwargs)

参数描述:

x:一个数组,定义水平轴上的点

y:一个数组或者标量,表示y轴覆盖的下限

y2:一个数组或者标量,表示y轴覆盖的上限

where:一个布尔数组,如果需要排除某些垂直区域的填充,则定义该数组。需要注意的是,这个定义意味着两个假值之间的一个孤立的真值将不进行填充。相邻的False值将导致不填充True值的两边

interpolate:接受布尔值,只有在使用了where参数同时两条曲线交叉时才有效。默认情况下,被填充的区域将被放在x阵列的位置,定义一个被填充的多边形区域。与x相交的部分被裁剪。

step:如果填充需要一个步骤函数,则使用该参数。接受’pre’、’post’、’mid’三个值,用于指定步骤将发生的位置。pre代表区间(x[i-1],x[i])的值为y[i],x值向左移动;post代表区间(x[i],x[i+1])的值为y[i],x值向右移动;mid代表步骤发生在x位置的中间。

其余参数描述可见该函数参数列表。

fill_between()函数示例

        1.准备工作

#导入库
import numpy as np
import matplotlib.pyplot as plt
#配置中文标签的正常显示
plt.rcParams['font.sans-serif']=['SimHei']
#配置负号的正常显示
plt.rcParams['axes.unicode_minus']=False

        2.填充曲线下面部分区域

#准备数据
x=np.linspace(0,1,500)
y=np.sin(3*np.pi*x)
#画曲线
plt.plot(x,y)
#填充曲线
plt.fill_between(x,0,y,facecolor='pink')

python——Matplotlib之fill_between函数

         3.填充部分区域

#准备数据
x=np.linspace(0,1,500)
y=np.sin(3*np.pi*x)
#画线
plt.plot(x,y)
#填充
plt.fill_between(x[15:300],0,0.2,facecolor='pink')

python——Matplotlib之fill_between函数

        4 .两条曲线之间的区域填充

#数据准备
x=np.linspace(0,1,500)
y=np.sin(3*np.pi*x)
z=y*2
#画线
plt.plot(x,y,color='b')
plt.plot(x,z,color='r')
#填充
plt.fill_between(x,y,z,facecolor="r",alpha=0.4)

python——Matplotlib之fill_between函数

 

        5.根据所给图形写出相应代码

图形

如下图所示

数据
x=np.linspace(-np.pi,np.pi,256,endpoint=True,y=sin(x),y=cos(x))

填充区域
紫色区域:(-2.5<x)&(x<-0.5)

绿色区域:np.abs(x)<0.5,sinx>0.5

python——Matplotlib之fill_between函数

 

#根据题意准备数据
x=np.linspace(-np.pi,np.pi,256,endpoint=True)
y=np.sin(x)
z=np.cos(x)
#x轴的坐标刻度
textX=[-np.pi,-np.pi/2,0,np.pi/2,np.pi]
#x轴的坐标文本显示
textS=['$-\pi$','$-\pi/2$','0','$\pi/2$','$\pi$']
#画线并设置其label,lw为线条粗细
plt.plot(x,y,lw=2.5,label="正弦sin()")
plt.plot(x,z,lw=2.5,label="余弦sin()")
#将坐标文本显示到对应坐标刻度上
for i in range(5):
    plt.text(textX[i],0,textS[i])
#显示网格
plt.grid()
#根据题意填充图形
plt.fill_between(x,z,where=(x>-2.5) & (x<-0.5),color="purple")
plt.fill_between(x,np.abs(x)<0.5,y,y>0.5,color="green")
#显示图标
plt.legend()
plt.show()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月29日 下午9:25
下一篇 2023年3月29日 下午9:28

相关推荐