matplotlib 显示多条随机线而不是多项式线的多项式数据

3gtaxfhh  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(149)

我有一个多项式函数,它从x输出y(来自多项式最小二乘拟合)。我试图绘制它来显示多项式连续曲线,如这里的一些答案所示:Plotting a polynomial using Matplotlib and coeffiecients
我的代码可以简化为:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. y = np.array([[-0.02200175],
  4. [-0.20964548],
  5. [ 0.68482722],
  6. [-0.30177928],
  7. [ 0.49887387],
  8. [-0.23443495],
  9. [ 0.62761791],
  10. [ 0.94930752],
  11. [ 0.82429792],
  12. [ 0.20244308]])
  13. x = np.array([[ 0.77123627],
  14. [ 0.84008558],
  15. [-0.39987312],
  16. [-0.85321811],
  17. [ 0.53479747],
  18. [-0.83009557],
  19. [ 0.45752816],
  20. [-0.10422071],
  21. [ 0.30249733],
  22. [-0.66099626]])
  23. plt.plot(x, y)

输出结果不是一条连续的曲线,而是一堆点之间的直线。为什么会这样?我如何纠正它?

oymdgrw7

oymdgrw71#

这个问题在另一个答案中已经说明了。我的答案展示了如何以排序的方式绘图。你的x数组和y数组是2维的(10 x 1)。在我的答案中,我展示了三种使用x的排序索引作为参数来以相同的顺序对y值进行排序的方法。

方式一:

  1. plt.plot(sorted(x), y[np.argsort(x[:, 0])])

方式二:

  1. plt.plot(sorted(x), y[np.argsort(x.ravel())])

方式三:

  1. x_sorted = np.sort(x.ravel())
  2. plt.plot(x_sorted, y[np.argsort(x_sorted)])
irtuqstp

irtuqstp2#

问题是你的点是无序的。plot函数的默认行为是在你给予它的点之间画线,按照你给它们的顺序。你的点位于抛物线上,但不是从左到右的顺序(或者从右到左,你用哪个都没关系)。
如果你删除线,只在点的位置绘制标记(plt.plot(x, y, linestyle="", marker="o")),你可以看到:

x数组排序可以让你得到你想要的输出,但是你需要对y数组进行同样的排序。关于如何做到这一点,请参阅How can I "zip sort" parallel numpy arrays?

相关问题