【问题标题】:Python curve for a lot points很多点的Python曲线
【发布时间】:2019-08-31 10:35:27
【问题描述】:

我正在使用 Python 和 matplotlib。 我有很多点,用数组生成。

fig, ax = plt.subplots(ncols=1, nrows=1, figsize=Groesse_cm/2.54)
ax.set_title(title)
ax.set_xlabel(xlabel) # Beschriftung X-Achse
ax.set_ylabel(ylabel) # Beschriftung Y-Achse
ax.plot(xWerte, yWerte, 'ro', label=kurveName)
ax.plot(xWerte, y2Werte, 'bo', label=kurveName2)
plt.show()

所以我有用于 x 值的 arrayX 和用于 Y 值(红色)的 arrayYmax 和用于 Y 值(蓝色)的 arrayYmin。我不能给你我的数组,因为那太复杂了。

我的问题是: 如何获得如上图所示的样条曲线/拟合?我不知道拟合点的功能,所以我只有 [x / y] 值的点。所以我不想连接我想要适合的点。所以是的,我说适合这个:D

这是一个我不想有的例子: 代码如下:

fig, ax = plt.subplots(ncols=1, nrows=1, figsize=Groesse_cm/2.54)
degree = 7
np.poly1d(np.polyfit(arrayX,arrayYmax,degree))
ax.plot(arrayX, arrayYmax, 'r')
np.poly1d(np.polyfit(arrayX,arrayYmin,degree))
ax.plot(arrayX, arrayYmin, 'b')
#Punkte
ax.plot(arrayX, arrayYmin, 'bo')
ax.plot(arrayX, arrayYmax, 'ro')
plt.show()

【问题讨论】:

  • “我不能给你我的数组,因为这太复杂了。”。您不必这样做,您可以提供一个代表样本作为minimal reproducible example的一部分
  • 也许您可以使用移动平均线之类的东西?有足够的数据点,它应该靠近你的红色曲线。您有时可以在统计图中看到这一点。或者你可以创建另一个函数,它总是取两个连续点的中间 Y 值。

标签: python image matplotlib points


【解决方案1】:

你已经很接近了,你只需要使用你正在估计/拟合的多项式模型。

从引入包和定义数据开始:

import numpy as np
import matplotlib.pyplot as plt

arr_x = [-0.8,  2.2,  5.2,  8.2, 11.2, 14.2, 17.2]
arr_y_min = [65, 165, 198, 183, 202, 175, 97]
arr_y_max = [618, 620, 545, 626, 557, 626, 555]

然后我们估计多项式拟合,就像您所做的那样,但将结果保存到我们以后可以使用的变量中:

poly_min = np.poly1d(np.polyfit(arr_x, arr_y_min, 2))
poly_max = np.poly1d(np.polyfit(arr_x, arr_y_max, 1))

接下来我们绘制数据:

plt.plot(arr_x, arr_y_min, 'bo:')
plt.plot(arr_x, arr_y_max, 'ro:')

接下来我们使用上面的多项式拟合来绘制一组采样点的估计值:

poly_x = np.linspace(-1, 18, 101)

plt.plot(poly_x, poly_min(poly_x), 'b')
plt.plot(poly_x, poly_max(poly_x), 'r')

给我们:

请注意,我使用的多项式(1 和 2)比您(7)低得多。七次多项式肯定会过度拟合这少量数据,而这些看起来是合理的拟合

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多