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 base64编码解码实例
Jun 21 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
python如何读写json数据
Mar 21 Python
python http基本验证方法
Dec 26 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
浅谈Python编程中3个常用的数据结构和算法
Apr 30 Python
python创建学生成绩管理系统
Nov 22 Python
序列化Python对象的方法
Aug 01 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 Python
Python中threading库实现线程锁与释放锁
May 17 Python
利用 Python 的 Pandas和 NumPy 库来清理数据
Apr 13 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
php实现二叉树中和为某一值的路径方法
2018/10/14 PHP
javascript的事件触发器介绍的实现
2014/06/05 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
Node.js的npm包管理器基础使用教程
2016/05/26 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
微信小程序登录session的使用
2019/03/17 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
对django中render()与render_to_response()的区别详解
2018/10/16 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
PHP统计代码行数的小代码
2019/09/19 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
python判断元素是否存在的实例方法
2020/09/24 Python
Python中的面向接口编程示例详解
2021/01/17 Python
HTML5 语音搜索只需一句代码
2013/01/03 HTML / CSS
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
如何写一个Java类既可以用作applet也可以用作java应用
2016/01/18 面试题
法学专业自我鉴定
2014/02/05 职场文书
开学寄语大全
2014/04/08 职场文书
项目投资建议书
2014/05/16 职场文书
工地安全标语
2014/06/07 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
小学总务工作总结
2015/08/13 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers