我试图在多个数据集之间近似一条最佳拟合线,并在一个图上显示所有内容。这个question解决了类似的概念,但内容在MatLab中,因此不一样。
我有来自4个不同实验的数据,这些数据由146
值组成,Y
值表示距离随时间的变化,X
值由整数时间步长(1,2,3,...)
表示,Y数据的形状是(4,146)
,因为我决定将所有数据保存在一个嵌套列表中,我的X数据的形状是(146,)
。我的子图设置如下:
x = [i for i in range(len(temp[0]))]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.scatter(x,Y[0],c="blue", marker='.',linewidth=1)
ax1.scatter(x,Y[1],c="orange", marker='.',linewidth=1)
ax1.scatter(x,Y[2],c="green", marker='.',linewidth=1)
ax1.scatter(x,Y[3],c="purple", marker='.',linewidth=1)
z = np.polyfit(x,Y,3) # Throws an error because x,Y are not the same length
p = np.poly1d(z)
plt.plot(x, p(x))
我不知道如何拟合散点图之间的最佳拟合线。numpy.polyfit
文档建议“Several data sets of sample points sharing the same x-coordinates can be fitted at once“,但到目前为止我还没有成功,只能将该线拟合到一个数据集。是否有方法可以将该线拟合到所有数据集?我是否应该使用完全不同的库,如Seaborn?
2条答案
按热度按时间jm2pwxwz1#
尝试将
x
和Y
强制转换为numpy数组(我假设它在一个列表中)。您可以使用x = np.asarray(x)
来完成此操作。现在要对数据进行集体拟合,你可以使用Y.flatten()
来展平Y
数组,它将形状从(n,N)
转换为(n*N)
。你可以把x
数组平铺n
次来拟合,这只是把n
数组复制到一个新数组中,所以它也会变成形状(n*N,)
,这样你就把Y
的值和x
的对应值匹配了。o8x7eapl2#
polyfit
函数期望Y
数组是(146, 4)
,而不是(4, 146)
,所以你应该把Y
的转置传给它,例如:poly1d
函数一次只能执行一个多项式,因此必须循环polyfit
的结果,例如: