Matplotlib不';t绘制某些数据..尽管分散是可行的

Matplotlib不';t绘制某些数据..尽管分散是可行的,matplotlib,plot,Matplotlib,Plot,说 以下函数-虽然它应该同时绘制散点图和线图(这与中的实现方式完全相同),但可以同时在标记中绘制这两个点,但是生成线时会丢失matplotlib twenty = [[0.00186157 0.00201416 0.00216675 0.00213623 0.00253296 0.00250244 0.00280762 0.00292969 0.00308228 0.0032959 0.00338745 0.003479 0.003479 0.00341797 0.00335693 0

以下函数-虽然它应该同时绘制散点图和线图(这与中的实现方式完全相同),但可以同时在标记中绘制这两个点,但是生成线时会丢失
matplotlib

twenty = [[0.00186157 0.00201416 0.00216675 0.00213623 0.00253296 0.00250244  0.00280762 0.00292969 0.00308228 0.0032959  0.00338745 0.003479  0.003479   0.00341797 0.00335693 0.00320435 0.00308228 0.0027771  0.00253296 0.00216675]]
twentyfirst = [[0.00186157]]

在引擎盖下面,这个问题询问了打印和打印之间的区别

def plot_time_series(twenty, twentyfirst):
    xlabel = np.arange(0, 1, 1./20).reshape(1,20)
    print(np.ones(twenty.shape[1])[np.newaxis,:].shape) #(1,20)
    A = np.vstack([xlabel, np.ones(twenty.shape[1])[np.newaxis,:]]).T

    m, c = np.linalg.lstsq(A, twenty.T)[0]
    print(m, c)
    plt.scatter(xlabel, twenty.T, c='b', label='data')
    ylabel = m*xlabel + c
    print(ylabel.shape) #(1,20)
    plt.plot(xlabel, ylabel, '-ok', label = 'fitted line')
    plt.legend(loc='best')
    plt.ylabel('amplitudes')
    plt.savefig('timeseries_problem2'+'_4')
    plt.close()

在这两种情况下,列表都是二维的。在第一种情况下,只有一行数据。在第二种情况下,只有一列数据

从:

x
y
:类似数组或标量
[…]
通常,这些参数是长度为N的数组。但是,也支持标量(相当于具有常量值的数组)

参数也可以是二维的。然后,列表示单独的数据集

重要的部分是最后一句话。如果数据是二维的,如这里所示,则按列进行解释。因为行数组
[[2,3,1]]
由3列组成,每列都有一个值<代码>绘图将因此产生3条带有一个点的单“线”。但由于单个点不定义直线,因此只有在激活标记时才可见,例如

plt.plot([[1],[2],[3]],[[2],[3],[1]])

将此行数组转换为列数组时,它将被解释为具有3个条目的单个数据集。因此,一条线的预期结果

plt.plot([[1,2,3]], [[2,3,1]], marker="o")

当然,将阵列展平到1D也是同样可能的

plt.plot([[1],[2],[3]], [[2],[3],[1]])
您可以轻松地检查您生产了多少条生产线

plt.plot(np.array([[1,2,3]]).flatten(), np.array([[2,3,1]]).flatten())

代码中发生的所有重塑都太令人困惑了。为什么不始终使用1D阵列?如果你真的想/需要这样做,我想你也需要转置绘图值,
plt.plot(xlabel.T,ylabel.T)
。这些是1d,只是长度很长。它们不是1d,否则你的代码会有几个错误。上面的建议无效吗?您要求我向您解释
linalg.lstsq
。我看不出你要换位,因为我已经能画了。这是一条线-当您将
plt.plt(xlabel,ylabel,'-ok',label='fitted line')
替换为
plt.plt(xlabel.T,ylabel.T,'-ok',label='fitted line')
时,绘图将如下所示。我想这就是你想要的。如果不是,考虑在问题内部澄清,这也解释了多个传说(列的数量)。非常感谢你。
plt.plot(np.array([[1,2,3]]).flatten(), np.array([[2,3,1]]).flatten())
print(len(plt.plot([[1,2,3]],[[2,3,1]])))            # prints 3
print(len(plt.plot([[1],[2],[3]],[[2],[3],[1]])))    # prints 1