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的Django框架中的通用视图
May 04 Python
Python爬取三国演义的实现方法
Sep 12 Python
解决phantomjs截图失败,phantom.exit位置的问题
May 17 Python
Python中psutil的介绍与用法
May 02 Python
python算法与数据结构之冒泡排序实例详解
Jun 22 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python程序暂停的正常处理方法
Nov 07 Python
python爬虫模块URL管理器模块用法解析
Feb 03 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
python Zmail模块简介与使用示例
Dec 19 Python
python 递归相关知识总结
Mar 03 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变量修饰符static的使用
2013/06/28 PHP
php图像处理类实例
2015/07/28 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
javascript来定义类的规范小结
2010/11/19 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
python3 深浅copy对比详解
2019/08/12 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
大学生预备党员自我评价分享
2013/11/16 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
母婴店促销方案
2014/03/05 职场文书
销售顾问工作计划书
2014/08/15 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
美术教师求职信范文
2015/03/20 职场文书
设备技术员岗位职责
2015/04/11 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers