Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么使用matplotlib的曲线拟合绘图看起来很模糊?_Python_Numpy_Matplotlib - Fatal编程技术网

Python 为什么使用matplotlib的曲线拟合绘图看起来很模糊?

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

我正在尝试使用多边形拟合函数进行曲线拟合。在调用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_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我编辑了我的答案。