我有一个多项式函数,它从x输出y(来自多项式最小二乘拟合)。我试图绘制它来显示多项式连续曲线,如这里的一些答案所示:Plotting a polynomial using Matplotlib and coeffiecients
我的代码可以简化为:
import numpy as np
import matplotlib.pyplot as plt
y = np.array([[-0.02200175],
[-0.20964548],
[ 0.68482722],
[-0.30177928],
[ 0.49887387],
[-0.23443495],
[ 0.62761791],
[ 0.94930752],
[ 0.82429792],
[ 0.20244308]])
x = np.array([[ 0.77123627],
[ 0.84008558],
[-0.39987312],
[-0.85321811],
[ 0.53479747],
[-0.83009557],
[ 0.45752816],
[-0.10422071],
[ 0.30249733],
[-0.66099626]])
plt.plot(x, y)
输出结果不是一条连续的曲线,而是一堆点之间的直线。为什么会这样?我如何纠正它?
2条答案
按热度按时间oymdgrw71#
这个问题在另一个答案中已经说明了。我的答案展示了如何以排序的方式绘图。你的x数组和y数组是2维的(10 x 1)。在我的答案中,我展示了三种使用x的排序索引作为参数来以相同的顺序对y值进行排序的方法。
方式一:
方式二:
方式三:
irtuqstp2#
问题是你的点是无序的。
plot
函数的默认行为是在你给予它的点之间画线,按照你给它们的顺序。你的点位于抛物线上,但不是从左到右的顺序(或者从右到左,你用哪个都没关系)。如果你删除线,只在点的位置绘制标记(
plt.plot(x, y, linestyle="", marker="o")
),你可以看到:对
x
数组排序可以让你得到你想要的输出,但是你需要对y
数组进行同样的排序。关于如何做到这一点,请参阅How can I "zip sort" parallel numpy arrays?。