如何通过 Python 3 中的真实数据点绘制平滑曲线?

Posted

技术标签:

【中文标题】如何通过 Python 3 中的真实数据点绘制平滑曲线?【英文标题】:How to plot smooth curve through the true data points in Python 3? 【发布时间】:2021-06-12 12:54:45 【问题描述】:

我已经尝试了一堆已经发布的样条示例,用于在 python 中绘制平滑曲线,但这些平滑曲线并不总是穿过真实点。到目前为止,我尝试使用 make_interp_splineinterp1d还有BSpline

有什么方法(任何样条选项)我可以绘制一条平滑的曲线,该曲线必须包含/交叉通过真实的数据点?

【问题讨论】:

【参考方案1】:

这是一个简单的例子,interp1d

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d

x = np.arange(5)
y = np.random.random(5)
fun = interp1d(x=x, y=y, kind=2)
x2 = np.linspace(start=0, stop=4, num=1000)
y2 = fun(x2)

plt.plot(x2, y2, color='b')
plt.plot(x, y, ls='', marker='o', color='r')

您可以轻松验证此插值是否包含真实数据点:

assert np.allclose(fun(x), y)

【讨论】:

以上是关于如何通过 Python 3 中的真实数据点绘制平滑曲线?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript HTML5画布通过N个点绘制平滑曲线?

如何在python中的散点图中平滑数据点?

在 matplotlib 图中绘制平滑曲线

使用Cubic Spline通过一组2D点绘制平滑曲线

MATLAB在NumPy / Python中的平滑实现(n点移动平均)

MATLAB 在 NumPy/Python 中的平滑实现(n 点移动平均)