Scikit-Spatial 使用 Plane.best_fit 给出奇怪的最佳拟合平面

Scikit-Spatial Gives Weird Best-Fit Plane using Plane.best_fit

我正在使用 scikit-spatial 为 3D 点列表找到最合适的平面。它通常适用于其他列表,但是这个给我带来了一些麻烦...

代码(py):

from skspatial.objects import Plane
from skspatial.objects import Points
from skspatial.objects import Point
from skspatial.plotting import plot_3d

points_list = [[2018.0, 3.0, -3.0], [2016.0, 3.0, -7.0], [2014.0, 27.0, 7.0], [2013.0, 3.0, -1.5], [2012.0, 4.5, 2.0], [2012.0, 16.5, 3.5], [2012.0, 18.0, 5.5], [2010.0, 13.5, 1.0], [2010.0, 21.0, -3.0], [2009.0, 30.0, 4.5]]

plot_3d(
    Points(points_list).plotter(c='k',s=15,depthshade=True),
    Plane.best_fit(points_list).plotter(alpha=0.2, lims_x=(-5, 5), lims_y=(-5, 5))
)[0].show()

供参考:Resulting Plot

无论如何,数据列表几乎是平坦的,但是 scikit-spatial returns 平面是绝对不合理的。我只是做错了什么,还是发生了其他事情?我在网上四处张望,但找不到类似的东西。谢谢!!

我是 scikit-spatial 的作者(我想以“嗨”开头,但 Whosebug 似乎是 auto-delete)。我现在刚好注意到这个问题,这就是为什么我迟到的原因。如果您对软件包有其他问题,请在 GitHub 存储库上创建一个问题,我会尽快回复您。

我同意这个最适合的平面在你的情节中看起来是错误的。但请注意轴的范围。 x-axis 从 2008 到 2018,范围 10。y-axis 从 5 到 30,范围 25。但是 z-axis 从 -1000 到 1000,范围2000 年

z-axis 的范围如此之大,以至于您的点看起来是平坦的,而实际上它们根本不是那么平坦。

尝试更改 z-axis 限制以获得与 x 轴和 y 轴更相似的范围:

_, ax = plot_3d(
    Points(points_list).plotter(c='k',s=15, depthshade=True),
    Plane.best_fit(points_list).plotter(alpha=0.2, lims_x=(-10, 10), lims_y=(-10, 10), color='b'),
)

ax.set_zlim([-10, 10])

现在看起来更可信了,这是最合适的平面。