绘制带有滑块的3d图形以控制绘制的点数

时间:2016-09-14 20:20:01

标签: r matlab plot graph interactive

我有数据,这是一个物体在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。

先谢谢。

1 个答案:

答案 0 :(得分:4)

这是一个可以根据需要自定义的原始示例。它使用manipulateplot3D

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))

enter image description here