使用Matlib + RGL时vector3d()图形中的奇怪对象

时间:2019-04-14 10:52:48

标签: r 3d rgl

我正尝试将3维向量(x,y,z坐标)绘制到R中的3D坐标系上,如下图所示。理想情况下,然后我想构造3d核密度图,也如下图所示。

Ideal result of vector plot and 3d kernel density plot

我有一个矩阵,每个坐标(x,y,z)包含〜100行和一列。最初,我从plot3D包中尝试过arrow3D(),但是我发现透视图未达到标准,很难从最终图中的一个透视图辨别箭头的方向。接下来,我尝试了rgl软件包,它使我具有了很好的交互性。最小的工作示例:

library(rgl)
library(matlib)

data2 <- data.frame(replicate(6,rnorm(100))) #sample data set for minimum working example

colnames(data2) <- c("x_target", "y_target", "z_target", "x_start", "y_start", "z_start")

x1 <- data2$x_target - data2$x_start
y1 <- data2$y_target - data2$y_start
z1 <- data2$z_target - data2$z_start

vec <- (diag(6,3))     # coordinates for x, y and z axis
rownames(vec) <- c("X", "Y", "Z")   # labels for x, y and z axis

z <- as.matrix((data.frame(x=x1, y=y1, z=z1)))

open3d()

vectors3d(vec, color=c(rep("black",3)), lwd=2, radius=1/25)
vectors3d(X=z, headlength=1/25)

(由于随机数生成器,看起来很奇怪的棒出现在不同的坐标上,而不完全像我在下面链接的图像所示)

上面代码的结果是下面图像链接的一个版本。一组坐标会产生一个非常奇怪的外观,看起来更像杆状对象,而杆状对象的时间要远长于坐标产生的时间。如果我分别绘制矢量,则不会创建此类对象。任何人都知道为什么会这样吗?另外,如果任何人都有一个工具(不必是R),它可以像第一个图像一样创建3D矢量绘图,我将不胜感激。我发现R中的代码非常复杂,但是我绝对是一个初学者。

Strange object to the right (long red rod that doesn't look like an arrow at all)

谢谢!

1 个答案:

答案 0 :(得分:0)

这是由于matlib软件包中的错误所致,该错误已在该软件包的0.9.2版中修复。我认为您需要从Github而不是CRAN安装它以获得错误修复:

devtools::install_github("friendly/matlib")

顺便说一句,如果您在可重现的示例中使用随机数,则可以通过类似的方式使其完全可重现

set.seed(123)

开头(或123以外的数字)。您在set.seed(4)的示例中看到了可重现的问题。