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学习之编写查询ip程序
Feb 27 Python
Python字符串处理实现单词反转
Jun 14 Python
TensorFlow如何实现反向传播
Feb 06 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
python对于requests的封装方法详解
Jan 03 Python
Django组件之cookie与session的使用方法
Jan 10 Python
Python字符串中添加、插入特定字符的方法
Sep 10 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
Feb 17 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
python Timer 类使用介绍
Dec 28 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
利用 window_onload 实现select默认选择
2006/10/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php中adodbzip类实例
2014/12/08 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
Angular6封装http请求的步骤详解
2018/08/13 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python实现将元祖转换成数组的方法
2015/05/04 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
Python中is与==判断的区别
2017/03/28 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
营销与策划应届生求职信
2013/11/04 职场文书
大学自我鉴定范文
2013/12/26 职场文书
优秀幼教自荐信
2014/02/03 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
MySQL学习总结-基础架构概述
2021/04/05 MySQL
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python