【问题标题】:Creating a Smooth Line in 3D R在 3D R 中创建平滑线
【发布时间】:2021-01-07 18:52:48
【问题描述】:

我有一组 3 维点,如下面的示例数据。我想从中创建一条平滑线。那里有关于在 3D 空间中平滑 2D 表面的信息,但是如何在 3D 空间中平滑 1D 线?

Z = seq(0, 1, 0.01)
X = rnorm(length(Z), mean = 0, sd = 0.1)
Y = 2 * Z ^ 2 + rnorm(length(Z), mean = 0, sd = 0.1)

data = data.frame(X = X, Y = Y, Z= Z)

【问题讨论】:

  • 不清楚您希望结果是什么样的。你想要一条穿过这些点的平滑线,还是想要一条平滑随机噪声的线(例如 (0, 2*Z^2, Z) for Z 从 0 到 1 )?你一直都知道XY应该是Z的函数吗?
  • 抱歉,这条线可以消除随机噪音。 XY 将始终是 Z 的函数(我正在查看树干的空间点并试图获得树干的近似曲线)。

标签: r 3d smoothing loess


【解决方案1】:

这是一个多元回归的例子。如果你碰巧知道与Z的关系应该是二次的,你可以这样做

fit <- lm(cbind(X, Y) ~ poly(Z, 2))

但我假设您不知道这一点,并且想要某种一般的平滑器。我不认为loesslowessgam 处理多元回归,但您可以在lm 中使用自然样条曲线:

library(splines)
fit <- lm(cbind(X, Y) ~ ns(Z, df = 4))

predict(fit) 将在两列矩阵中返回拟合值。 要绘制结果,可以使用rgl:

library(rgl)
plot3d(X, Y, Z, col = "red")
lines3d(cbind(predict(fit), Z))

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2021-02-06
    • 1970-01-01
    • 2016-08-07
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多