遇到的问题及解决
import numpy as np
import matplotlib.pyplot as plt
# 给定数据点
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.2, 2.8, 3.6, 4.5, 5.1])
# 线性回归
p = np.polyfit(x, y, 1)
# 绘制拟合结果
y_fit = np.polyval(p, x)
plt.plot(x, y, 'o', label='数据点')
plt.plot(x, y_fit, '-', label='拟合线')
plt.xlabel('x')
plt.ylabel('y')
plt.title('最小二乘法拟合(Python)')
plt.legend()
plt.show()
如果在使用 matplotlib
绘图时汉字显示不出来,可能是由于缺少相应的字体支持。解决这个问题的方法通常有以下几种:
方法一:设置自定义字体
你可以通过设置 matplotlib
使用中文字体来解决汉字显示问题。可以在代码中添加以下设置:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
# 设置中文字体
font_path = 'C:/Windows/Fonts/simsun.ttc' # Windows系统
# font_path = '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc' # Linux系统
# font_path = '/Library/Fonts/Songti.ttc' # macOS系统
my_font = fm.FontProperties(fname=font_path, size=14)
# 绘图代码
plt.plot(x, y, 'o', label='数据点', fontproperties=my_font)
plt.plot(x, y_fit, '-', label='拟合线', fontproperties=my_font)
plt.xlabel('x', fontproperties=my_font)
plt.ylabel('y', fontproperties=my_font)
plt.title('最小二乘法拟合(Python)', fontproperties=my_font)
plt.legend(prop={'size': 12, 'family': 'SimSun'}) # 设置图例字体
plt.show()
DiffCopyInsert
方法二:使用默认字体
如果你不想设置具体的字体,可以尝试使用默认配置并让 matplotlib
自动选择支持中文的字体:
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
matplotlib.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
DiffCopyInsert
在绘图代码前加入上述配置后,运行你的代码看看效果。
方法三:安装缺失的字体
在某些情况下,你的系统可能缺少中文字体。你可以尝试安装一些常用的中文字体,如「思源黑体」或「微软雅黑」。安装完成后,按照方法一的步骤进行字体设置。
采用以上任一方法后,再次运行代码,汉字就应该能够正确显示了。
polyfit
函数
polyfit
是 numpy
库中的一个函数,用于进行多项式拟合。它的基本作用是找到一个多项式,使得该多项式能够最佳地拟合给定的数据点。
函数定义:
numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)
参数说明:
x
:自变量的值(数据点的 x 坐标)。y
:因变量的值(数据点的 y 坐标)。deg
:拟合多项式的阶数,例如 1 表示线性拟合,2 表示二次多项式拟合,以此类推。rcond
:用于对奇异值的相对条件数的阈值(可选)。full
:如果设置为True
,返回更多的信息(可选)。w
:权重数组,允许对每个点进行加权(可选)。cov
:如果设置为True
,计算参数的协方差矩阵(可选)。
返回值:
polyfit
返回的是一个一维数组,其中包含了拟合多项式的系数,系数的顺序从高到低。例如,对于线性拟合,返回的数组包含斜率和截距。
示例:
在你的代码中,调用 np.polyfit(x, y, 1)
表示对给定的 x 和 y 数据进行一次线性拟合,返回的系数会用于生成拟合线。
polyval函数
polyval
是 numpy
库中的一个函数,用于计算一个多项式在给定点的值。它通常与 polyfit
函数一起使用,前者用于拟合多项式,后者用于计算该多项式在特定自变量值处的对应因变量值。
函数定义:
numpy.polyval(p, x)
参数说明:
p
:一维数组,包含多项式的系数,按降幂排列。例如,对于二次多项式 ,则p
需要是[a, b, c]
。x
:可以是单个值、数组或列表,表示自变量的值,polyval
会计算多项式在这些值处的对应因变量值。
返回值:
polyval
返回的是根据多项式系数计算得出的因变量值。
示例:
在你的代码中,调用 np.polyval(p, x)
,p
是通过 np.polyfit(x, y, 1)
得到的线性拟合系数,然后在 x
的所有值处计算该线性函数的对应的 y
值,从而得到拟合的结果 y_fit
。
import numpy as np
import matplotlib.pyplot as plt
# 给定数据点
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.2, 2.8, 3.6, 4.5, 5.1])
# 线性回归
p = np.polyfit(x, y, 1)
# 绘制拟合结果
y_fit = np.polyval(p, x)
plt.plot(x, y, 'o', label='数据点')
plt.plot(x, y_fit, '-', label='拟合线')
plt.xlabel('x')
plt.ylabel('y')
plt.title('最小二乘法拟合(Python)')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号'-'显示为方块的问题
plt.legend()
plt.show()