python matplotlib用面积填充实现lmplot的代码示例
作者:微小冷
这篇文章主要介绍了python matplotlib如何用面积填充实现lmplot,文章通过代码示例介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴可以参考阅读
示例
在绘图时经常遇到类似区域填充的问题,比如对于y = sin x y=\sin xy=sinx函数,想填充其与X轴所围成的区间,那么就可以使用fill_between函数。
import numpy as np import matplotlib.pyplot as plt x = np.arange(0, 2, 0.01) y = np.sin(2 * np.pi * x) plt.plot(x, y, color='black') plt.fill_between(x, y) plt.grid() plt.show()
效果如下
参数
fill_between参数如下,其中x, y1, y2
都是数组,表示希望覆盖的范围,具体逻辑是,对于某点xi,将对应的[y1i,y2i]范围内涂上颜色。在上面的示例中,只设置了x
和y1
,而y2
默认为0,所以绘制的就是y1
到0范围内的值。
fill_between(x, y1, y2=0, where=None, interpolate=False, step=None, *,**kwargs)
其他参数含义如下
- where 可以指定参与绘图的范围,一般是一个布尔型数组
- interpolate 为
True
时采用插值 - step 可选’pre’, ‘post’, ‘mid’,表示步进方案
plt.plot(x, y, color='black') plt.fill_between(x, y, where=y > 0, facecolor='green', alpha=.5) plt.fill_between(x, y, where=y < 0, facecolor='red', alpha=.5) plt.show()
结果如图
回归图
有了这种填充工具,就可以做出类似seaborn中的lmplot,这种图形在数据拟合时十分有用,可以在除了拟合线之外,再将数据的分布范围标出。
首先创造一组带有误差的y = 2x + 1y=2x+1y=2x+1数据,并通过最小二乘法得到其拟合参数。
x = np.arange(0, 2, 0.02) err = np.random.rand(100)/2 y = 2*x + 1 + err # 构造并调用最小二乘法 A = np.array([x, np.ones_like(x)]).T kb, res, _, _ = np.linalg.lstsq(A, y)
下面就对拟合结果进行绘制,首先根据拟合出来的k , bk, bk,b,来得到趋势线Y = kx + bY=kx+bY=kx+b,然后调用绘图函数,对原始数据、趋势线、分布区间进行绘制
Y = kb[0]*x + kb[1] dx = (x-x.mean())**2 E = x.std() * np.sqrt(1/len(x) + dx / np.sum(dx)) plt.scatter(x, y, marker='.') # 原始数据 plt.plot(x, Y) # 趋势线 plt.fill_between(x, Y - E, Y + E, alpha=0.5) plt.show()
效果如下
到此这篇关于python matplotlib用面积填充实现lmplot的代码示例的文章就介绍到这了,更多相关python matplotlib实现lmplot内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!