python - 为什么我使用 matplotlib 的曲线拟合图看起来很模糊?
问题描述
我正在尝试使用 polyfit 函数进行曲线拟合。噪声数据是使用三阶多项式生成的,并且在调用 polyfit 函数时使用三阶。但结果图中没有任何曲线元素:
import matplotlib.pyplot as plt
import numpy as np
noise_scale = 100
number_of_samples = 100
x = 25*(np.random.rand(number_of_samples,1)-0.8)
y = 5*x+20*x**2+1*x**3 + noise_scale*np.random.randn(number_of_samples,1)
xs = x.flatten()
ys = y.flatten()
p3 = np.poly1d(np.polyfit(xs, ys, 3))
plt.plot(xs,ys,'b.',xs, p3(xs),'r--')
我想知道这里做错了什么。
谢谢
解决方案
plt.plot()
按照坐标出现在xs
和ys
数组中的顺序绘制点,并通过直线段连接连续的点。由于xs
数组中的数字是随机顺序的,这些直线段随着值的xs
增加和减少来回曲折。为了得到多项式函数的图,数组xs
需要从最小值到最大值进行排序。需要对数组ys
进行相应的排序,以便点的 y 坐标仍然对应于它们关联的 x 坐标。这可以按如下方式完成:
import matplotlib.pyplot as plt
import numpy as np
noise_scale = 100
number_of_samples = 100
x = 25*(np.random.rand(number_of_samples,1)-0.8)
y = 5*x+20*x**2+1*x**3 + noise_scale*np.random.randn(number_of_samples,1)
xs = x.flatten()
ys = y.flatten()
# sort coordinates
s = np.argsort(xs)
xs = xs[s]
ys = ys[s]
p3 = np.poly1d(np.polyfit(xs, ys, 3))
plt.plot(xs,ys,'b.',xs, p3(xs),'r--')
这给出了:
推荐阅读
- python - 展平熊猫数据框中的数组json对象列的数组
- excel - 根据另一个单元格值隐藏/取消隐藏行
- python - 从空间中提取实体
- swift - 无效的 Swift 支持 - SwiftSupport 文件夹为空
- javascript - 在 React 中使用异步等待进行 SessionStorage 调用
- android - Chromium - 为 Android Studio 构建 gradle 时出错
- azure - 在 Application Insights 中获取月份名称
- android - 对于公共乐趣 Fragment.findNavController() 的许多论点
- java - 如何使用 citrus 框架将 Soap 响应消息存储在字符串中
- spring - Spring中如何通过自定义用户事件管理日志文件切换?