脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python实现线性拟合及绘图的示例代码

Python实现线性拟合及绘图的示例代码

2024-04-30 14:20浩瀚地学 Python

在数据处理和绘图中,我们通常会遇到直线或曲线的拟合问题,本文主要介绍了Python实现线性拟合及绘图的示例代码,具有一定的参考价值,感兴趣的可以了解一下

当时的数字地形实验,使用 matplotlib库绘制了一张图表表示不同地形类别在不同分辨率下的RMSE值,并分别拟合了一条趋势线。现在来看不足就是地形较多时,需要使用循环更好一点,不然太冗余了。

环境:Python 3.9

代码逻辑

导入所需库以及初步设置

# coding=gbk
# -*- coding = utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np
plt.subplots_adjust(left=0.05, right=0.7, top=0.9, bottom=0.1)
plt.rcParams['font.sans-serif'] = ['SimHei']

准备数据(这里仅展示部分)

resolutions = [50, 100, 150, 200, 250]
plain = [0, 0, 1, 1, 1]
hill = [2.645751311, 7.071067812, 10.44030651, 11.48912529, 14.4222051]

这里可以改为在Excel中读取,尤其是数据多的时候

分别绘制不同数据的趋势线

# 绘制平原趋势线
coefficients_plain = np.polyfit(resolutions, plain, 1)
poly_plain = np.poly1d(coefficients_plain)
plt.plot(resolutions, plain, '^', label="平原")
plt.plot(resolutions, poly_plain(resolutions), label="平原趋势线")

# 绘制丘陵趋势线
coefficients_hill = np.polyfit(resolutions, hill, 1)
poly_hill = np.poly1d(coefficients_hill)
plt.plot(resolutions, hill, '^', label="丘陵")
plt.plot(resolutions, poly_hill(resolutions), label="丘陵趋势线")

使用np.polyfit函数拟合一阶多项式(直线),然后使用np.poly1d构造多项式对象。绘制原始数据点(用’^'标记)和对应的拟合趋势线。

计算指标

# 计算平原趋势线的r值和r方
residuals_plain = plain - poly_plain(resolutions)
ss_residuals_plain = np.sum(residuals_plain**2)
ss_total_plain = np.sum((plain - np.mean(plain))**2)
r_squared_plain = 1 - (ss_residuals_plain / ss_total_plain)
r_plain = np.sqrt(r_squared_plain)

# 计算丘陵趋势线的r值和r方
residuals_hill = hill - poly_hill(resolutions)
ss_residuals_hill = np.sum(residuals_hill**2)
ss_total_hill = np.sum((hill - np.mean(hill))**2)
r_squared_hill = 1 - (ss_residuals_hill / ss_total_hill)
r_hill = np.sqrt(r_squared_hill)

计算得到r方和r值

绘图和打印指标

# 设置图例和标题
plt.legend()
plt.legend(loc='center left', bbox_to_anchor=(1.05, 0.5))
plt.title("地形趋势线")

# 设置坐标轴标题
new_ticks = np.arange(50, 251, 50)
plt.xticks(new_ticks)
plt.xlabel('分辨率(m)')
plt.ylabel('RMSE')
formula1 = "平原:{}".format(poly_plain)
plt.text(0.05, 0.95, formula1, transform=plt.gca().transAxes,
         fontsize=10, verticalalignment='top')
formula1 = "丘陵:{}".format(poly_hill)
plt.text(0.35, 0.95, formula1, transform=plt.gca().transAxes,
         fontsize=10, verticalalignment='top')

# 显示图形
plt.figure(figsize=(10, 10))
plt.show()

# 打印
print("平原趋势线公式:", poly_plain)
print("丘陵趋势线公式:", poly_hill)
print("平原趋势线:")
print("r值:", r_plain)
print("r方:", r_squared_plain)
print()
print("丘陵趋势线:")
print("r值:", r_hill)
print("r方:", r_squared_hill)
print()

完整代码

# coding=gbk
# -*- coding = utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np
plt.subplots_adjust(left=0.05, right=0.7, top=0.9, bottom=0.1)
plt.rcParams['font.sans-serif'] = ['SimHei']

resolutions = [50, 100, 150, 200, 250]
plain = [0, 0, 1, 1, 1]
hill = [2.645751311, 7.071067812, 10.44030651, 11.48912529, 14.4222051]

# 绘制平原趋势线
coefficients_plain = np.polyfit(resolutions, plain, 1)
poly_plain = np.poly1d(coefficients_plain)
plt.plot(resolutions, plain, '^', label="平原")
plt.plot(resolutions, poly_plain(resolutions), label="平原趋势线")

# 绘制丘陵趋势线
coefficients_hill = np.polyfit(resolutions, hill, 1)
poly_hill = np.poly1d(coefficients_hill)
plt.plot(resolutions, hill, '^', label="丘陵")
plt.plot(resolutions, poly_hill(resolutions), label="丘陵趋势线")

# 计算平原趋势线的r值和r方
residuals_plain = plain - poly_plain(resolutions)
ss_residuals_plain = np.sum(residuals_plain**2)
ss_total_plain = np.sum((plain - np.mean(plain))**2)
r_squared_plain = 1 - (ss_residuals_plain / ss_total_plain)
r_plain = np.sqrt(r_squared_plain)

# 计算丘陵趋势线的r值和r方
residuals_hill = hill - poly_hill(resolutions)
ss_residuals_hill = np.sum(residuals_hill**2)
ss_total_hill = np.sum((hill - np.mean(hill))**2)
r_squared_hill = 1 - (ss_residuals_hill / ss_total_hill)
r_hill = np.sqrt(r_squared_hill)

# 设置图例和标题
plt.legend()
plt.legend(loc='center left', bbox_to_anchor=(1.05, 0.5))
plt.title("地形趋势线")

# 设置坐标轴标题
new_ticks = np.arange(50, 251, 50)
plt.xticks(new_ticks)
plt.xlabel('分辨率(m)')
plt.ylabel('RMSE')
formula1 = "平原:{}".format(poly_plain)
plt.text(0.05, 0.95, formula1, transform=plt.gca().transAxes,
         fontsize=10, verticalalignment='top')
formula1 = "丘陵:{}".format(poly_hill)
plt.text(0.35, 0.95, formula1, transform=plt.gca().transAxes,
         fontsize=10, verticalalignment='top')

# 显示图形
plt.figure(figsize=(10, 10))
plt.show()

# 打印
print("平原趋势线公式:", poly_plain)
print("丘陵趋势线公式:", poly_hill)
print("平原趋势线:")
print("r值:", r_plain)
print("r方:", r_squared_plain)
print()
print("丘陵趋势线:")
print("r值:", r_hill)
print("r方:", r_squared_hill)
print()

结果

Python实现线性拟合及绘图的示例代码

参考

Matplotlib pyplot文档

到此这篇关于Python实现线性拟合及绘图的示例代码的文章就介绍到这了,更多相关Python 线性拟合及绘图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/zbh13859825167/article/details/138203029

延伸 · 阅读

精彩推荐
  • Python五种Python转义表示法

    五种Python转义表示法

    这篇文章主要介绍了五种Python转义表示法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    写代码的明哥6062022-02-18
  • Pythonpython 30行代码实现蚂蚁森林自动偷能量

    python 30行代码实现蚂蚁森林自动偷能量

    这篇文章主要介绍了python 30行代码实现蚂蚁森林自动偷能量的方法,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...

    xindoo5132021-09-04
  • PythonTensorFlow的环境配置与安装方法

    TensorFlow的环境配置与安装方法

    这篇文章主要介绍了TensorFlow的环境配置与安装方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    Blessy_Zhu12942021-09-06
  • Python基于python分享一款地理数据可视化神器keplergl

    基于python分享一款地理数据可视化神器keplergl

    这篇文章主要介绍了分享一款地理数据可视化神器keplergl,keplergl是由Uber开源的一款地理数据可视化工具,通过keplergl我们可以在Jupyter notebook中使用,下文...

    编程技术8102022-10-12
  • PythonPython 生成短8位唯一id实战教程

    Python 生成短8位唯一id实战教程

    这篇文章主要介绍了Python 生成短8位唯一id实战教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    授客8132021-08-24
  • Python使用Pyinstaller打包exe文件详细图文教程

    使用Pyinstaller打包exe文件详细图文教程

    PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了,下面这篇文章主要给大家介绍了关于使用Pyinstaller打包exe文...

    彳亍2615032022-08-15
  • PythonPython&Matlab实现樱花的绘制

    Python&Matlab实现樱花的绘制

    正值樱花飘落的季节,本文将利用Python和Matlab分别绘制一颗樱花树,文中的示例代码讲解详细,感兴趣的小伙伴快跟随小编一起动手尝试一下...

    电力系统与算法之美11642022-11-24
  • Python聊聊Python中的浮点数运算不准确问题

    聊聊Python中的浮点数运算不准确问题

    这篇文章主要介绍了聊聊Python中的浮点数运算不准确问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    一只阔爱的程序媛4732021-09-23