python——Matplotlib之fill_between函数
Matplotlib是Python提供的一套基于NumPy的绘图工具包,用Python实现与MATLAB相似的命令API,十分适合交互式绘制图表,成为Python中应用非常广的绘图工具包之一。
在对数据可视化时,为了突出某一段数据需要对部分区域进行填充处理。Matplotlib中通过fill_between()函数实现填充两个水平曲线之间的区域。
首先我们通过以下语句,查看fill_between的参数列表
plt.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 npimport 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')
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')
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)
5.根据所给图形写出相应代码
图形
如下图所示
数据
x=np.linspace(-np.pi,np.pi,256,endpoint=True,y=sin(x),y=cos(x))填充区域
紫色区域:(-2.5绿色区域:np.abs(x)<0.5,sinx>0.5
#根据题意准备数据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()
来源地址:https://blog.csdn.net/qq_44998582/article/details/128530119
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341