python - 很多点的Python曲线
问题描述
我正在使用 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()
所以我有arrayX
x 值和arrayYmax
Y 值(红色)和arrayYmin
Y 值(蓝色)。我不能给你我的数组,因为这太复杂了。
我的问题是:我怎样才能获得上图中的样条/拟合?我不知道拟合点的功能,所以我只有 [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()
解决方案
你非常接近,你只需要使用你正在估计/拟合的多项式模型。
从拉入包和定义数据开始:
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)低得多。七次多项式肯定会过度拟合这少量数据,这些看起来是合理的拟合
推荐阅读
- php - Soundcloud API (PHP) 返回“无效授权”
- typescript - 在 NestJS + GraphQL 中实现“命名空间类型”解析器
- python - 在 ListView 中使用过滤后的查询集进行分页
- javascript - 如何在 Gatsby 的查询中限制组中的对象?
- android - 如何在 Android 中运行 AsyncTask?
- php - GROUP_Concat 超链接
- javascript - 如果我将 iframe 旋转 90 度,滚动/触摸轴不会改变
- javascript - 无法使用函数获取 While 循环不适用于 onclick() 函数
- javascript - 字符串呈现项中的箭头函数
- mysql - 我不能在 MySQL 命令中使用变量