python利用插值法对折线进行平滑曲线处理
作者:叮当了个河蟹 发布时间:2023-10-15 14:48:08
标签:python,插值法,平滑曲线
在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:
实现所需的库
numpy、scipy、matplotlib
插值法实现
nearest:最邻近插值法
zero:阶梯插值
slinear:线性插值
quadratic、cubic:2、3阶 * 条曲线插值
-
拟合和插值的区别
1、插值:简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点。
2拟合:拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点。
代码实现
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
#设置距离
x =np.array([0, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 70, 8, 9,10])
#设置相似度
y =np.array([0.8579087793827057, 0.8079087793827057, 0.7679087793827057, 0.679087793827057,
0.5579087793827057, 0.4579087793827057, 0.3079087793827057, 0.3009087793827057,
0.2579087793827057, 0.2009087793827057, 0.1999087793827057, 0.1579087793827057,
0.0099087793827057, 0.0079087793827057, 0.0069087793827057, 0.0019087793827057,
0.0000087793827057])
#插值法之后的x轴值,表示从0到10间距为0.5的200个数
xnew =np.arange(0,10,0.1)
#实现函数
func = interpolate.interp1d(x,y,kind='cubic')
#利用xnew和func函数生成ynew,xnew数量等于ynew数量
ynew = func(xnew)
# 原始折线
plt.plot(x, y, "r", linewidth=1)
#平滑处理后曲线
plt.plot(xnew,ynew)
#设置x,y轴代表意思
plt.xlabel("The distance between POI and user(km)")
plt.ylabel("probability")
#设置标题
plt.title("The content similarity of different distance")
#设置x,y轴的坐标范围
plt.xlim(0,10,8)
plt.ylim(0,1)
plt.show()
绘制后的曲线,红色是未进行平滑处理的折线,蓝色是进行平滑处理之后的曲线
注意事项
1.x, y为原来的数据(少量)
2.xnew为一个数组,条件:x⊆⊆xnew
如:x的最小值为-2.931,最大值为10.312;则xnew的左边界要小于-2.931,右边界要大于10.312。当然也最好注意一下间距,最好小于x中的精度
3.func为函数,里面的参数x、y、kind,x,y就是原数据的x,y,kind为需要指定的方法
4.ynew需要通过xnew数组和func函数来生成,理论上xnew数组内的值越多,生成的曲线越平滑
来源:https://blog.csdn.net/qq_25073545/article/details/79560012


猜你喜欢
- 1.socket黏包问题原理黏包:指数据与数据之间没有明确的分界线,导致不能正确的读取数据。应用数据想要发送数据就必须将数据交给操作系统,而
- 如果您还不太了解XML技术,您可以先看看此文:XML的语法、结构以及相关的一些技术 及 XML DOM介绍和例子XML中 CDATA的作用:
- 之前在用预训练的ResNet的模型进行迁移训练时,是固定除最后一层的前面层权重,然后把全连接层输出改为自己需要的数目,进行最后一层的训练,那
- 前言相信大家初入某个项目,一般都要看代码。有时候,想把代码文件打印下来看,不过一般代码文件数量都在两位数或更多,逐一打开、打印,确实太耗费精
- 前言URLconf 就像是 Django 所支撑网站的目录。它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表。你就
- 目录前言Tips - django版本区别路由匹配无名分组&有名分组无名分组有名分组小提示反向解析路由不涉及分组的反向解析有名分组&
- 每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync)、wx.getStorage
- 我的同事Fara给大家介绍了戴尔网站首页的改版设计,这里我还想和大家介绍一下戴尔是如何从网站用户使用体验的角度进行设计,让大家进一步了解戴尔
- 目录爬取目标站点分析编码时间爬取结果展示爬取目标站点分析本次采集的目标站点为:https://www.zaih.com/falcon/men
- 使用php就不一样了,php包含了zlib的链接库,可以直接使用其相关功能,下面是我写的压缩和结压缩swf文件的例子: //没有加入判断sw
- 类的定义 类定义有三种基本方法,1、创建并能返回特定类型的对象的函数(工厂函数),例如:function Co(){ var o = new
- function getTableDataByXML(inTable, inWindow) { var
- 二进制包方式安装一、首先检查服务器上是否安装有mysql:第一步:查看mysql安装版本rpm -qa|grep -i mysql第二步:卸
- 文档 地址functools.partial作用:functools.partial 通过包装手法,允许我们 "重新定义"
- 1. 排序有什么用“排序”这个专业名词原本是来源于计算机程序操作中的,是一种很常见的算法设计,当然,对交互设计来说,探讨冒泡排序和堆排序之间
- 本文实例讲述了Python使用matplotlib简单绘图。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#!
- 1、安装Django在命令行模式下使用pip工具来安装Django,pip工具的安装方法见此篇pip install django2、确认是
- mysql的存储目录默认是在/var/lib/mysql/,下面将修改默认存储目录.本文使用mysql8.0.20版本,与mysql8.0.
- 数据库系统的安全性包括很多方面。由于很多情况下,数据库服务器容许客户机从网络上连接,因此客户机连接的安全对MySQL数据库安全有很重要的影响
- home.html:<!DOCTYPE html><html lang="en"><hea