python利用插值法对折线进行平滑曲线处理

在用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()

绘制后的曲线,红色是未进行平滑处理的折线,蓝色是进行平滑处理之后的曲线

注意事项

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数组内的值越多,生成的曲线越平滑

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python使用插值法画出平滑曲线

    本文实例为大家分享了python使用插值法画出平滑曲线的具体代码,供大家参考,具体内容如下 实现所需的库 numpy.scipy.matplotlib 实现所需的方法 插值 nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic.cubic:2.3阶B样条曲线插值 拟合和插值的区别 简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点. 拟合是通过原有数据,调整曲线系数,使得曲线与已知点集的差别(最小二乘)最小,最后生成的曲线不一定经过原有点

  • python实现各种插值法(数值分析)

    一维插值 插值不同于拟合.插值函数经过样本点,拟合函数一般基于最小二乘法尽量靠近所有样本点穿过.常见插值方法有拉格朗日插值法.分段插值法.样条插值法. 拉格朗日插值多项式:当节点数n较大时,拉格朗日插值多项式的次数较高,可能出现不一致的收敛情况,而且计算复杂.随着样点增加,高次插值会带来误差的震动现象称为龙格现象. 分段插值:虽然收敛,但光滑性较差. 样条插值:样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的插值误差,这样就避免了使用高阶多项

  • Python实现的拉格朗日插值法示例

    本文实例讲述了Python实现的拉格朗日插值法.分享给大家供大家参考,具体如下: 拉格朗日插值简单介绍 拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法. 许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解.在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个简单函数,其恰好在各个现测的点取到观测到的值,这个函数可以是代数多项式,三角多项式等. 完整Python示例: # -*- coding:utf-8 -*- #拉格朗日

  • python用插值法绘制平滑曲线

    本文实例为大家分享了python用插值法绘制平滑曲线的具体代码,供大家参考,具体内容如下 原图: 平滑处理后: 代码实现如下: # 1. 随机构造数据 import numpy as np x = range(10) y = np.random.randint(10,size=10) # 2. 绘制原图 import matplotlib as mpl import matplotlib.pyplot as plt %matplotlib inline # jupyter notebook显示绘

  • python利用插值法对折线进行平滑曲线处理

    在用python绘图的时候,经常由于数据的原因导致画出来的图折线分界过于明显,因此需要对原数据绘制的折线进行平滑处理,本文介绍利用插值法进行平滑曲线处理: 实现所需的库 numpy.scipy.matplotlib 插值法实现 nearest:最邻近插值法 zero:阶梯插值 slinear:线性插值 quadratic.cubic:2.3阶B样条曲线插值 - 拟合和插值的区别 1.插值:简单来说,插值就是根据原有数据进行填充,最后生成的曲线一定过原有点. 2拟合:拟合是通过原有数据,调整曲线系

  • Python利用matplotlib绘制折线图的新手教程

    前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 二.matplotlib图像简介 matplotlib的图像分为三层,容器层.辅助显示层和图像层. 1. 容器层主要由Canvas.Figure.Axes组成. Canvas位

  • Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度

    前言 matplotlib.pyplot是一些命令行风格函数的集合,使matplotlib以类似于MATLAB的方式工作.每个pyplot函数对一幅图片(figure)做一些改动:比如创建新图片,在图片创建一个新的作图区域(plotting area),在一个作图区域内画直线,给图添加标签(label)等.matplotlib.pyplot是有状态的,亦即它会保存当前图片和作图区域的状态,新的作图函数会作用在当前图片的状态基础之上. 在开始本文之前,不熟悉的朋友可以先看看这篇文章:Python

  • Python利用matplotlib绘制散点图的新手教程

    前言 上篇文章介绍了使用matplotlib绘制折线图,参考:https://www.jb51.net/article/198991.htm,本篇文章继续介绍使用matplotlib绘制散点图. 一.matplotlib绘制散点图 # coding=utf-8 import matplotlib.pyplot as plt years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] turnovers =

  • 详解Python牛顿插值法

    一.牛顿多项式 拉格朗日多项式的公式不具备递推性,每个多项式需要单独构造.但很多时候我们需要从若干个逼近多项式选择一个.这个时候我们就需要一个具有递推关系的方法来构造--牛顿多项式 这里的的a0,a1-等可以通过逐一带入点的值来求得.但是当项数多起来时,会发现式子变得很大,这个时候我们便要引入差商的概念(利用差分思想)具体见式子能更好理解 这里在编程实现中我们可以推出相应的差商推导方程 d(k,0)=y(k) d(k,j)=(d(k,j-1)-d(k-1,j-1)) / (x(k)-x(k-j)

  • Python利用 matplotlib 绘制直方图

    目录 1. 直方图概述 1.1什么是直方图? 1.2直方图使用场景 1.3直方图绘制步骤 1.4案例展示 2. 直方图属性 2.1设置颜色 2.2设置长条形数目 2.3设置透明度 2.4设置样式 3. 添加折线直方图 4. 堆叠直方图 5. 不等距直方图 6. 多类直方图 复习回顾: 经过前面对 matplotlib 模块从底层架构.基本绘制步骤等学习,我们已经学习了折线图.柱状图的绘制方法. matplotlib 模块基础:对matplotlib 模块常用方法进行学习 matplotlib 模

  • Python利用matplotlib实现饼图绘制

    目录 前言 1. 等高线图概述 什么是饼图? 饼图常用场景 绘制等饼图步骤 案例展示 2. 饼图属性 设置饼图的颜色 设置标签 设置突出部分 设置填入百分比数值 饼图旋转 设置阴影 3. 调整饼图的大小 4. 添加图例 5. 镂空饼图 总结 前言 众所周知,matplotlib.pyplot 提供绘制不同表格绘制方法,如使用plot()方法绘制折线,bar()绘制柱 在matplotlib.pyplot 中还有一种图表用于直观表示占比情况的饼图,在matplotlib官网上也列举出非常多关于饼图

  • Python利用Matplotlib绘制图表详解

    目录 前言 折线图绘制与显示 绘制数学函数图像 散点图绘制 绘制柱状图 绘制直方图 饼图 前言 Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以很快的熟悉它. Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI 工具包(比如 PyQt,WxPython.Tkinter)在应用程序中嵌入图形.与此同时,它也支持以脚本的形式在 Python.IPython Shell.Jupyter Notebo

随机推荐