【问题标题】:matplotlib.pyplot.plot polynomial data showing several random lines instead of polynomial linematplotlib.pyplot.plot 多项式数据显示几条随机线而不是多项式线
【发布时间】:2020-10-11 08:31:46
【问题描述】:

我有一个多项式函数,它从 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)

输出不是连续的曲线,而是点之间的一堆线。为什么是这样?怎么改?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    问题是您的积分有问题。 plot 函数的默认行为是在你给它的点之间画线,按照你给它们的顺序。您的点位于抛物线上,但不是从左到右的顺序(或从右到左,无论您使用哪个都没有关系)。

    如果您删除线并仅在点的位置绘制标记(plt.plot(x, y, linestyle="", marker="o")),您可以看到:

    x 数组进行排序可以获得所需的输出,但您需要将y 数组排序为相同的顺序。有关如何执行此操作的一些想法,请参阅 How can I "zip sort" parallel numpy arrays?

    【讨论】:

      【解决方案2】:

      问题如另一个答案所述。我的回答显示了如何以排序方式进行绘图。您的 x-array 和 y-array 是二维的 (10 x 1)。在我的回答中,我展示了三种使用 x 的排序索引作为参数以相同顺序对 y 值进行排序的方法。

      方式一:

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

      方式 2:

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

      方式 3:

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

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 1970-01-01
        • 2020-02-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        • 1970-01-01
        • 2021-01-03
        相关资源
        最近更新 更多