【Python】matplotlib 绘图

遇到的问题及解决

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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幽兰的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值