我试图将三维矢量(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)
谢谢!
这是由于matlib
包中的一个错误,修正了该包的第0.9.2节。我认为您需要从Github而不是CRAN安装它来修复错误:
devtools::install_github("friendly/matlib")
顺便说一句,如果你在一个可重复的例子中使用随机数,你可以通过类似的东西使它完全可重复
set.seed(123)
在开始时(或123以外的一些数字)。我看到你的set.seed(4)
示例可重现的问题。