我有数据,这是一个物体在3D空间中以固定的时间间隔移动。数据如下:
Time X Y Z
1 1 1 1
2 2 1 2
3 2 0 1
4 3 2 1
.....
(x,y,z)是时间 t 时对象的位置。我想绘制一个3D图形,其中显示了3d空间中对象的完整移动,但是要有一个滑块或类似的东西,我可以在其中选择时间范围(比如说500到750)并查看对象的移动3D空间。所以,这里我们有4个维度:x,y,z是位置,时间是第4维度,并使用滑块控制在该时间内的点的绘图。 [以下Mathematica中的示例给出了一个很好的想法]
使其更清晰。我们首先在3D空间中绘制对象的完整移动,从时间1到 N 。然后,通过控制滑块,我们在 t1 到 t2 时间戳之间绘制相同对象的移动。显示滑块的位置也很重要(因为我必须根据移动记录一些感兴趣的时间戳)。
我用谷歌搜索了同样的东西,但没有一个例子足以让我得到我想要的东西。所有这些都将滑块绑定到一个轴变量(比如x或y,可能是时间),但是我们必须将它绑定到第四维,即时间。 dygraphs 很有希望,但我遇到了上面讨论的类似问题(也没有找到任何3d支持)。
This one in Mathematica is interesting。但我没有许可证。它只是在跟踪的3D路径上移动一个点。这也可以解决我的问题,但是当我暂停时我应该能够知道时间戳值。
R 中的解决方案对我有好处,因为它没有任何许可问题。或者在Matlab中,如果它不使用任何高级可视化工具箱。或者Python。
先谢谢。
答案 0 :(得分:4)
这是一个可以根据需要自定义的原始示例。它使用manipulate
和plot3D
library(manipulate)
library(plot3D)
min_time <- 1
max_time <- 100
time_interval <- min_time:max_time
# Create data frame
DF <- data.frame(t = time_interval)
# Time parametric functions
X <- function(t) {
return(2 * t)
}
Y <- function(t) {
return(t ** 2)
}
Z <- function(t) {
return(10 * cos(t / 100))
}
# Update data frame
DF$x <- sapply(DF$t, X)
DF$y <- sapply(DF$t, Y)
DF$z <- sapply(DF$t, Z)
# Use manipulate with RStudio
manipulate({
lines3D(x = DF$x, y = DF$y, z = DF$z)
scatter3D(
x = DF$x[t],
y = DF$y[t],
z = DF$z[t],
add = TRUE
)
}, t = slider(min_time, max_time))