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生成随机密码或随机字符串的方法
Jul 03 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
Django实现全文检索的方法(支持中文)
May 14 Python
python实现Virginia无密钥解密
Mar 20 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
wxpython绘制音频效果
Nov 18 Python
基于Pytorch SSD模型分析
Feb 18 Python
如何对python的字典进行排序
Jun 19 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
selenium携带cookies模拟登陆CSDN的实现
Jan 19 Python
Python打包exe时各种异常处理方案总结
May 18 Python
Pytest中conftest.py的用法
Jun 27 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
Windows系统中安装nodejs图文教程
2015/02/28 NodeJs
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
js简单倒计时实现代码
2016/04/30 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
js实现简单数字变动效果
2017/11/06 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
bootstrap datepicker的基本使用教程
2019/07/09 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
用python实现对比两张图片的不同
2018/02/05 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
2012/12/31 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
Weblogc domain问题
2014/01/27 面试题
如何进行Linux分区优化
2016/09/13 面试题
黄继光的英雄事迹材料
2014/02/13 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python