我有两个数据点列表:
list_x = [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
list_y = [1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
当我绘制它们时,图形将如下所示:
import matplotlib.pyplot as plt
plt.plot(list_x, list_y)
plt.show()
基于这些数据点,有没有办法使图形看起来像下面的图形并得到它的图形方程?
================================================ =========
我尝试使用 此处 的解决方案,但它生成的图形并不平滑。
from scipy.interpolate import spline
import numpy as np
list_x_new = np.linspace(min(list_x), max(list_x), 1000)
list_y_smooth = spline(list_x, list_y, list_x_new)
plt.plot(list_x_new, list_y_smooth)
plt.show()
原文由 Fxs7576 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个与 Davis Herring 的建议相呼应的简单选择是对数据使用多项式近似
您会注意到原始数据中不存在的图右端的振荡,这是多项式逼近的产物。
Davis 上面建议的样条插值是另一个不错的选择。改变平滑度参数
s
您可以在平滑度和与原始数据的距离之间取得不同的平衡。