Python 为什么使用matplotlib的曲线拟合绘图看起来很模糊?
我正在尝试使用多边形拟合函数进行曲线拟合。在调用polyfit函数时,使用三阶多项式生成噪声数据,使用三阶am生成噪声数据。但结果图中没有任何曲线元素:Python 为什么使用matplotlib的曲线拟合绘图看起来很模糊?,python,numpy,matplotlib,Python,Numpy,Matplotlib,我正在尝试使用多边形拟合函数进行曲线拟合。在调用polyfit函数时,使用三阶多项式生成噪声数据,使用三阶am生成噪声数据。但结果图中没有任何曲线元素: 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
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--')
这使得:
谢谢。如果你能解释为什么需要排序,那就太好了。@VijayAngelo我编辑了我的答案。