在Python中,绘制两个拟合图可以通过matplotlib库和numpy库来实现,下面将详细介绍如何在Python中绘制两个拟合图,包括线性拟合和非线性拟合,本文将分步骤进行讲解,让你轻松掌握这一技能。
我们需要安装matplotlib和numpy库,如果还未安装,可以使用以下命令进行安装:
pip install matplotlib numpy
我们开始编写代码,首先导入所需的库:
import numpy as np import matplotlib.pyplot as plt from numpy.linalg import lstsq
以下是一个示例,我们将首先生成一组随机数据,然后分别进行线性拟合和非线性拟合。
1、生成随机数据
生成随机数据 np.random.seed(0) x = np.linspace(0, 10, 100) y = 2 * x + 1 + np.random.randn(100) * 2
2、绘制原始数据散点图
绘制原始数据散点图 plt.scatter(x, y, color='blue', label='Original data') plt.xlabel('x') plt.ylabel('y') plt.legend()
3、线性拟合
线性拟合 A = np.vstack([x, np.ones(len(x))]).T m, c = lstsq(A, y, rcond=None)[0] plt.plot(x, m*x + c, color='red', label='Linear fit')
4、非线性拟合(以二次函数为例)
非线性拟合(二次函数) p = np.poly1d(np.polyfit(x, y, 2)) plt.plot(x, p(x), color='green', label='Quadratic fit')
5、显示拟合结果
显示拟合结果 plt.scatter(x, y, color='blue') # 重新绘制散点图,以覆盖之前的线条 plt.plot(x, m*x + c, color='red') # 重新绘制线性拟合曲线 plt.plot(x, p(x), color='green') # 重新绘制非线性拟合曲线 plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show()
通过以上步骤,我们成功绘制了两个拟合图,下面详细解释一下每个步骤:
- 在第一步中,我们使用np.linspace
生成了一组等间隔的x值,并通过np.random.randn
生成了随机噪声,以模拟真实数据。
- 第二步中,我们使用plt.scatter
绘制了原始数据的散点图。
- 第三步中,我们使用numpy.linalg.lstsq
进行线性拟合,这里,我们构造了一个矩阵A,其中包含x值和常数项,然后使用最小二乘法求解线性方程。
- 第四步中,我们使用np.polyfit
和np.poly1d
进行二次函数拟合,这里,np.polyfit
用于计算多项式系数,np.poly1d
用于创建一个多项式对象。
- 最后一步中,我们重新绘制了散点图和拟合曲线,并使用plt.legend
添加图例,plt.show
显示图形。
这样,你就学会了如何在Python中绘制两个拟合图,这个方法可以广泛应用于数据分析、机器学习等领域,帮助你更好地理解数据之间的关系。