Python利用Scipy插值法绘制平滑曲线详解

阿澈
阿澈
发布时间:2026-10-13| 6人浏览过
原创

本文介绍如何使用Python的numpy、scipy和matplotlib库绘制平滑曲线。重点讲解interp1d函数的nearest、zero、slinear、quadratic及cubic等插值方法,并区分插值与拟合的概念。通过完整代码示例,展示如何生成xnew数组并计算ynew,同时强调xnew范围需覆盖原数据且间距要小于原数据精度,以确保曲线平滑。

本文分享一个使用Python通过插值法绘制平滑曲线的具体实现方案,供读者参考学习。

准备必要的第三方库。

主要依赖numpy、scipy以及matplotlib三个库。

核心实现涉及插值函数的调用。

在插值过程中,kind参数决定了具体的插值策略。

  • nearest表示采用最邻近点插值。
  • zero代表阶梯状插值。
  • slinear指线性插值。
  • quadratic和cubic分别对应2阶和3阶B样条曲线插值。

理解拟合与插值的本质差异。

插值的核心逻辑是基于原始数据点进行填充,生成的曲线必然经过所有原始数据点。

拟合则是基于原始数据调整曲线系数,使曲线与已知点集的误差(如最小二乘法)最小化,因此生成的曲线不一定经过原始数据点。

具体代码实现如下。

# -*- coding: utf-8 -*-

# 调用模块
# 调用数组模块
import numpy as np
# 实现插值的模块
from scipy import interpolate
# 画图的模块
import matplotlib.pyplot as plt
# 生成随机数的模块
import random

# random.randint(0, 10) 生成0-10范围内的一个整型数
# y是一个数组里面有10个随机数,表示y轴的值
y = np.array([random.randint(0, 10) for _ in range(10)])
# x是一个数组,表示x轴的值
x = np.array([num for num in range(10)])

# 插值法之后的x轴值,表示从0到9间距为0.5的18个数
xnew = np.arange(0, 9, 0.5)

"""
kind方法:
nearest、zero、slinear、quadratic、cubic
实现函数func
"""
func = interpolate.interp1d(x, y, kind='cubic')
# 利用xnew和func函数生成ynew,xnew的数量等于ynew数量
ynew = func(xnew)

# 画图部分
# 原图
plt.plot(x, y, 'ro-')
# 拟合之后的平滑曲线图
plt.plot(xnew, ynew)
plt.show()

在使用插值函数时需注意以下关键事项。

  • x和y代表原始的少量数据点。
  • xnew是一个新生成的数组,其条件要求原始x数据必须包含在xnew的范围内。
  • 例如,若x的最小值为-2.931,最大值为10.312,则xnew的左边界必须小于-2.931,右边界必须大于10.312。此外,建议xnew的间距小于原始x数据的精度,以获得更好的效果。
  • func为插值函数对象,其参数包括x、y和kind。其中x和y传入原始数据,kind指定所需的插值方法。
  • ynew是通过将xnew数组传入func函数计算得出的结果。
  • 理论上,xnew数组中包含的数据点越多,最终生成的曲线就越平滑。

以上就是本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。