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中的filter()函数的用法
Apr 27 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
离线安装Pyecharts的步骤以及依赖包流程
Apr 23 Python
Python 模拟登陆的两种实现方法
Aug 10 Python
Python数据结构之单链表详解
Sep 12 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python实现大量图片重命名
Mar 23 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
pandas中DataFrame重置索引的几种方法
May 24 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
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
PHP处理CSV表格文件的常用操作方法总结
2016/07/01 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
将json对象转换为字符串的方法
2014/02/20 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
Python进程间通信用法实例
2015/06/04 Python
基于Python实现文件大小输出
2016/01/11 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
python按照多个条件排序的方法
2019/02/08 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python爬虫搭配起Bilibili唧唧的流程分析
2020/12/01 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
企事业单位求职者的自我评价
2013/12/28 职场文书
护理中职生求职信范文
2014/02/24 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
2016教师节感恩话语
2015/12/09 职场文书
高三化学教学反思
2016/02/22 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书