python利用插值法对折线进行平滑曲线处理


Posted in Python onDecember 25, 2018

在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理:

实现所需的库

numpy、scipy、matplotlib

插值法实现

nearest:最邻近插值法
zero:阶梯插值
slinear:线性插值
quadratic、cubic:2、3阶B样条曲线插值
-

拟合和插值的区别

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

python利用插值法对折线进行平滑曲线处理

绘制后的曲线,红色是未进行平滑处理的折线,蓝色是进行平滑处理之后的曲线

注意事项

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数组内的值越多,生成的曲线越平滑

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
Numpy数组的保存与读取方法
Apr 04 Python
Python基于socket模块实现UDP通信功能示例
Apr 10 Python
python实现求特征选择的信息增益
Dec 18 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
python画图常规设置方式
Mar 05 Python
django执行原始查询sql,并返回Dict字典例子
Apr 01 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
Python使用BeautifulSoup4修改网页内容
May 20 Python
基于Python对数据shape的常见操作详解
Dec 25 #Python
Python正则匹配判断手机号是否合法的方法
Dec 09 #Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 #Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 #Python
Python lambda表达式用法实例分析
Dec 25 #Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 #Python
浅谈python 读excel数值为浮点型的问题
Dec 25 #Python
You might like
在PHP中利用wsdl创建标准webservice的实现代码
2011/12/07 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP的PDO连接讲解
2019/01/24 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
Javascript实现动态菜单添加的实例代码
2013/07/05 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
jquery链式操作的正确使用方法
2014/01/06 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
vue+Element-ui实现分页效果实例代码详解
2018/12/10 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
vue中封装axios并实现api接口的统一管理
2020/12/25 Vue.js
Python Json序列化与反序列化的示例
2018/01/31 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python pip替换为阿里源的方法步骤
2019/07/02 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
预备党员综合考察材料
2014/05/31 职场文书
体育个人工作总结
2015/02/09 职场文书
社区重阳节活动总结
2015/03/24 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL