Python的Numpy进行线性拟合并绘图

Python的Numpy进行线性拟合并绘图,第1张

文章目录
  • 前言

  • 一、核心函数


  • 二、举例


  • 三、结果

    • 欢迎讨论,一起加油!


前言

使用Numpy进行线性拟合并出图



一、核心函数

def linear_fit(x, y):  # 拟合函数
    # z = np.polyfit(np.log(x), np.log(y), 1)
    z = np.polyfit(x, y, 1)
    return [z[0], z[1]]

def plotfit(X, Y, w, b):  # 散点拟合图
    plt.rcParams['font.family'] = ["Times New Roman"]
    matplotlib.rcParams['font.family'] = 'Times New Roman'
    # 使字体同非 mathtext 字的字体,此处即 Times New Roman
    matplotlib.rcParams['mathtext.default'] = 'regular'
    plt.rc('font', family='times new roman')
    fig, ax = plt.subplots(1, figsize=(6, 5))
    plt.scatter(X, Y, c='black', label='Original Data', alpha=0.5)
    plt.plot([min(X), max(X)], [w*min(X)+b, w*max(X)+b], 'red',
             linewidth='1.5', label='Best Line')
    plt.legend(loc=2, fontsize=14, frameon=False)
    plt.xlabel('X', size=14)  
    plt.ylabel('Y', fontsize=14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    # plt.xscale('log')
    # plt.yscale('log')
    # plt.tight_layout()
    # plt.show()
    plt.savefig('拟合结果.png', dpi=300)

二、举例

代码如下(示例):

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

def linear_fit(x, y):
    # z = np.polyfit(np.log(x), np.log(y), 1)
    z = np.polyfit(x, y, 1)
    return [z[0], z[1]]

def plotfit(X, Y, w, b):  # 散点拟合图
    plt.rcParams['font.family'] = ["Times New Roman"]
    matplotlib.rcParams['font.family'] = 'Times New Roman'
    # 使字体同非 mathtext 字的字体,此处即 Times New Roman
    matplotlib.rcParams['mathtext.default'] = 'regular'
    plt.rc('font', family='times new roman')
    fig, ax = plt.subplots(1, figsize=(6, 5))
    plt.scatter(X, Y, c='black', label='Original Data', alpha=0.5)
    plt.plot([min(X), max(X)], [w*min(X)+b, w*max(X)+b], 'red',
             linewidth='1.5', label='Best Line')
    plt.legend(loc=2, fontsize=14, frameon=False)
    plt.xlabel('X', size=14)  
    plt.ylabel('Y', fontsize=14)
    plt.xticks(fontsize=14)
    plt.yticks(fontsize=14)
    # plt.xscale('log')
    # plt.yscale('log')
    # plt.tight_layout()
    # plt.show()
    plt.savefig('拟合结果.png', dpi=300)

# 先预设一个结果,假定拟合的结果为 y=6x+10
X = np.linspace(0, 10, 100)
a = 6
b = 10
Y = list(map(lambda x: a * x + b, X))
# 增加噪声,制造数据
Y_noise = list(map(lambda y: y + np.random.randn() * 10, Y))
#拟合
p = linear_fit(X, Y_noise)
plotfit(X, Y_noise, p[0], p[1])


三、结果 欢迎讨论,一起加油!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存