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中的闭包实例详解
Aug 29 Python
python发送HTTP请求的方法小结
Jul 08 Python
如何使用Python的Requests包实现模拟登陆
Apr 27 Python
django 多数据库配置教程
May 30 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
python3.6利用pyinstall打包py为exe的操作实例
Oct 31 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
python如何判断IP地址合法性
Apr 05 Python
Python调用shell命令常用方法(4种)
May 11 Python
Python列表去重复项的N种方法(实例代码)
May 12 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
javascript some()函数用法详解
2014/11/13 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
JS 实现双色表格实现代码
2009/11/24 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python 元组(Tuple)操作详解
2014/03/11 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python数据集切分实例
2018/12/08 Python
对DJango视图(views)和模版(templates)的使用详解
2019/07/17 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
奥地利票务门户网站:oeticket.com
2019/12/31 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
安全教育实施方案
2014/03/02 职场文书
诚信贷款承诺书
2014/05/30 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
田径运动会通讯稿
2015/07/18 职场文书
升职自荐书
2019/05/09 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang