使用 matlib + rgl 时 vector3d() 图形中的奇怪对象

Strange object in vector3d() graphic when using matlib + 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)

(由于随机数生成器的原因,奇怪的杆出现在不同的坐标,与下面的图像 link 不完全一样)

上面代码的结果是下面图像的一个版本 link。一组坐标产生一个非常奇怪的外观,更像杆状物体,它比坐标产生的要长得多。如果我单独绘制矢量,则不会创建此类对象。任何人都知道为什么会发生这种情况?另外,如果有人有工具(不一定是 R),可以像第一张图片那样创建 3D 矢量图,我将不胜感激。我发现它在 R 中非常复杂,但我绝对是初学者。

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

谢谢!

这是由于 matlib 包中的一个错误,已在该包的 0.9.2 版中修复。我认为您需要从 Github 而不是 CRAN 安装它才能修复错误:

devtools::install_github("friendly/matlib")

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

的方式使其完美重现
set.seed(123)

开头(或 123 以外的某个数字)。我在 set.seed(4).

的示例中看到了可重现的问题