这让我措手不及,似乎没有默认的支持来做类似的事情,甚至没有任何直接的方式
这种操作通常只需在Excel之类的程序中单击按钮即可
import random
import numpy as np
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [random.randint(0,10) for _ in range(4)]
plt.plot(x,y)
plt.show()
基本上,对于上面只有4个点的图,我想知道最简单的方法是简单地平滑直线,使其类似于曲线
更新: 因此,使用三次样条曲线通常可以做得很好
但有一个问题。在曲线中,我们可以看到,根据曲线的构建方式,存在高于实际观察到的最大点的点,以及低于实际最小点的点。是否有解决办法使曲线不超过最大观测点和最小观测点
您可以使用LOESS或Nadarya-Watson estimator(和变体)从离散数据获得平滑曲线。这些方法执行“移动平均”技术,因此它们通常不会产生原始数据范围以外的点(对于原始数据域内的
x
值)有一个convenient python library(完整的免责声明,我是该库的作者)使此类模型易于构建。注意,结果通常不会通过给定的数据点
当带宽参数变为0时,曲线将成为线性插值。当它变为无穷大时,曲线将变成一条普通的最小二乘回归线。这两个值之间的带宽在这两个极端之间产生连续的曲线序列
一个简单的解决方案是使用scipy的interp1d通过点创建三次样条曲线
一种避免曲线超出周围点范围的方法是创建一条三次Bézier曲线,并在两个点之间添加额外的点
另一种方法涉及scipy的单调三次插值,^{} ,也称为
pchip
。此函数保持插值数据的单调性,如果数据不平滑,则不会超调请注意,还有多种其他类型的spline functions可用
相关问题 更多 >
编程相关推荐